如何使用Parallel Streams将foreach更改为lambda

时间:2016-05-16 07:56:56

标签: java java-8 java-stream

我有以下方法

private Set<Chapter> chapters;
public long getCount() {
    long count = 0;
    for (Chapter chapter : chapters) count += chapter.getCount();
    return count;
}

我希望使用Java 8功能(例如streams和lambda)改进此代码,但我无法将外部变量更改为lambda,所以我试图作弊,但这是一个非常糟糕的解决方案。

public long getCount() {
    final long[] count = {0};
    chapters.parallelStream().forEach(chapter -> count[0] += chapter.getCount());
    return count[0];
}

你能帮助我吗 - 或者提供一些有用的链接给我。 对不起,如果它是重复的。

1 个答案:

答案 0 :(得分:3)

不再重要,我已经找到了mapToLong()

的单行解决方案

https://docs.oracle.com/javase/tutorial/collections/streams/reduction.html

public long getCount() {
    return chapters.parallelStream().mapToLong(Chapter::getCount).sum();
}