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