2016-05-16 12 views
1

パラレル・ストリームでラムダへのforeachを変更すると、私はそのような流れとラムダなどのJava 8の機能を使用してこのコードを改善したいが、私は、ラムダに外部変数を変更することはできません私は不正行為を試みましたが、それはひどい解決策でした。は、どのように私は方法</p> <pre><code>private Set<Chapter> chapters; public long getCount() { long count = 0; for (Chapter chapter : chapters) count += chapter.getCount(); return count; } </code></pre> <p>次いる

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

私にそれを手伝ったり、役立つリンクを教えてもらえますか? 重複していると申し訳ありません。

+0

を持つ単一行の解決策を見つけるよもはや問題ではありません* 。だから、全く解決策はありません。しかし、あなたは既に正しい解決策を見つけました。(http://stackoverflow.com/a/372​​49194/2711488)... – Holger

答えて

3

、私はすでに*完全に壊れている配列要素への同時アクセスなど、「ひどいソリューション」ではありませんmapToLong()

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

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

沢山のチャプターがない場合、 'parallelStream'を使うとパフォーマンスが著しく低下することに注意してください。 –

+0

はい、私はそれを知っていました、有用な注意のおかげで – Batiaev

関連する問題

 関連する問題