收集后在java8上获取索引

CCC*_*CCC 2 lambda java-8 java-stream

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

Ous*_* D. 5

for环路的版本是这种类型的逻辑的更好,但如果你真的想使用流,那么我会保持生活简单,做的两个步骤,而不是一味以所有的逻辑到一个单一的数据流管道可能导致的可读性码.

int count = (int)someList.stream()
                         .filter(a -> a.get().equals(“red”))
                         .count();

IntStream.rangeClosed(1, count)
         .mapToObj(X::new)
         .collect(toList());
Run Code Online (Sandbox Code Playgroud)

如前所述,这绝不比for循环版本好,但是这里是为了说明,有时在使用流时,最好的方法是执行多次传递,而不是试图将所有东西都装入单个管道.