有没有一种简洁的方法来迭代流,同时有权访问流中的索引?
String[] names = {"Sam","Pamela", "Dave", "Pascal", "Erik"};
List<String> nameList;
Stream<Integer> indices = intRange(1, names.length).boxed();
nameList = zip(indices, stream(names), SimpleEntry::new)
.filter(e -> e.getValue().length() <= e.getKey())
.map(Entry::getValue)
.collect(toList());
Run Code Online (Sandbox Code Playgroud)
与那里给出的LINQ示例相比,这似乎相当令人失望
string[] names = { "Sam", "Pamela", "Dave", "Pascal", "Erik" };
var nameList = names.Where((c, index) => c.Length <= index + 1).ToList();
Run Code Online (Sandbox Code Playgroud)
有更简洁的方法吗?
此外,看起来拉链已移动或被移除......
a只能在这里决赛.为什么?如何a在onClick()不将其保留为私有成员的情况下重新分配方法?
private void f(Button b, final int a){
b.addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
int b = a*5;
}
});
}
Run Code Online (Sandbox Code Playgroud)如何5 * a点击它返回?我的意思是,
private void f(Button b, final int a){
b.addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
int b = a*5;
return b; // but return type is void
}
});
}
Run Code Online (Sandbox Code Playgroud)我想得到一个答案,指出下面在一个非常简单的例子中描述的以下想法通常被认为是坏的并且知道它的弱点的原因.
我有一句话,我的目标是让每一秒都变成大写.我对这两个案例的出发点完全相同:
String sentence = "Hi, this is just a simple short sentence";
String[] split = sentence.split(" ");
Run Code Online (Sandbox Code Playgroud)
在传统和程序的做法是:
StringBuilder stringBuilder = new StringBuilder();
for (int i=0; i<split.length; i++) {
if (i%2==0) {
stringBuilder.append(split[i]);
} else {
stringBuilder.append(split[i].toUpperCase());
}
if (i<split.length-1) { stringBuilder.append(" "); }
}
Run Code Online (Sandbox Code Playgroud)
当想要使用java-stream时,由于lambda表达式中使用的有效final或final变量约束,使用受到限制.我必须使用数组及其第一个也是唯一的索引来解决这个问题,我在问题的第一个评论中建议如何在Java Stream中增加一个值.这是一个例子:
int index[] = {0};
String result = Arrays.stream(split)
.map(i -> index[0]++%2==0 ? i : i.toUpperCase())
.collect(Collectors.joining(" "));
Run Code Online (Sandbox Code Playgroud)
是的,这是一个糟糕的解决方案,我听到一些隐藏在我无法找到的问题评论中的好理由(如果你提醒我其中一些,如果可能的话我会投票两次).但是,如果我使用AtomicInteger它会产生什么影响呢?它是一种安全好的方式,与前一种相比没有副作用吗?
AtomicInteger atom = new AtomicInteger(0);
String …Run Code Online (Sandbox Code Playgroud) 我有以下代码,我想使用Java 8流API进行翻译.
count = 0;
for (A a : someList) {
if (a.get() == 1) {
count++;
newList.add(new X(count));
}
}
Run Code Online (Sandbox Code Playgroud)
映射时如何计算?
newList = someList.stream
.filter(a -> a.get().equals("red"))
.map(a -> new X(count))
.collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)