lambda - 收集后获取java8上的索引

标签 lambda java-8 java-stream

我有以下代码段,我想使用 Java 8 流 API 对其进行翻译。

count = 0;
for (A a : someList) {
   if (a.get() == 1) {
     count++;
     newList.add(new X(count));
   }
}

绘制 map 时如何获得该计数?

newList = someList.stream
.filter(a -> a.get().equals("red"))
.map(a -> new X(count))
.collect(Collectors.toList());

最佳答案

for 循环版本更适合这种类型的逻辑,但如果您真的想要使用 Streams,那么我会保持简单并分两步完成尝试将所有逻辑转储到单个流管道中,这可能会导致代码可读性较差。

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

IntStream.rangeClosed(1, count)
         .mapToObj(X::new)
         .collect(toList());

正如已经提到的,这绝不比 for 循环版本更好,但这里是为了说明,有时使用流时,最好的方法是执行多次传递,而不是尝试将所有内容放入一个循环中。单管道。

关于lambda - 收集后获取java8上的索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50026335/

相关文章:

java - 当不涉及集合时,Java 8 Lambdas 与普通方法调用相比如何?

python - 为什么 Amazon Linux 上的 .so 文件比 OS X 上的大 5 倍?

java - 如何使用java流过滤 map 的 map

Java 8 Stream Filter - 基于排序的更新

c++ - Lambda 到函数指针适配器的理解

java - 在 Java 中,我们可以声明 lambda 表达式存储在堆中吗?

Java Stream按一个属性分组并按另一个属性收集最大元素

java-8 - 如何使用流来获取运行计数?

java - Lambda 表达式找不到符号

java - 按对象值分组,计数,然后按最大对象属性设置组键