相关疑难解决方法(0)

是否有一种简洁的方法来迭代Java 8中的索引流?

有没有一种简洁的方法来迭代流,同时有权访问流中的索引?

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)

有更简洁的方法吗?

此外,看起来拉链已移动或被移除......

java java-8 java-stream

361
推荐指数
10
解决办法
24万
查看次数

为什么在匿名类中只能访问最终变量?

  1. a只能在这里决赛.为什么?如何aonClick()不将其保留为私有成员的情况下重新分配方法?

    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)
  2. 如何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)

java event-handling anonymous-class

341
推荐指数
7
解决办法
11万
查看次数

使用AtomicInteger在Stream中进行索引是一种合法的方式吗?

我想得到一个答案,指出下面在一个非常简单的例子中描述的以下想法通常被认为是坏的并且知道它的弱点的原因.

我有一句话,我的目标是让每一秒都变成大写.我对这两个案例的出发点完全相同:

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)

当想要使用,由于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 iteration java-8 java-stream

4
推荐指数
2
解决办法
685
查看次数

收集后在java8上获取索引

我有以下代码,我想使用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)

lambda java-8 java-stream

2
推荐指数
1
解决办法
76
查看次数