2017-01-13 11 views
-4

内のストリームのAPIの表現に変換することができますここでは、コードスニペットです:が、私はこの表現は、Java 8

List<Double> dataLeft, List<Double> dataRight; 
double sumLeft = 0, sumRight = 0; 
for (int i = 0; i < dataLeft.size(); i++) { 
    sumLeft += dataLeft.get(i)*(dataLeft.size() - i); 
    sumRight += dataRight.get(i)*(dataRight.size() - i); 
} 

dataLeftとdataRightが同じサイズです。

+0

あなたはより多くのデータを追加することができますか?あなたがやろうとしていること、コードの説明など。 – theo2003

+1

'0'から' dataLeft.size() 'にループしています。 'dataRight.size()'と同じであるはずですか? 'sumLeft'と' numRight'は最初はゼロですか? – Holger

答えて

3

確かに、あなたはあまり得られません。あなたも 私見

、可読性に
sumLeft += IntStream.range(0, dataLeft.size()).mapToDouble(i-> dataLeft.get(i) * (dataLeft.size() - i)).sum(); 
sumRight += IntStream.range(0, dataLeft.size()).mapToDouble(i-> dataRight.get(i) * (dataRight.size() - i)).sum(); 
0

を失うこれについてどのような:

private double sum(final List<Double> data) { 
    final AtomicInteger index = new AtomicInteger(0); 
    final int n = data.size(); 
    return data.stream().mapToDouble(d -> d * (n - index.getAndIncrement())).sum(); 
} 

次に、このようにそれを使用します。

sumLeft += sum(dataLeft); 
sumRight += sum(dataRight); 
+0

あなたは正しいです、私はそれを削除します... – user2878850

関連する問題