2016-05-13 2 views
-4

java Lambdasを使用してどのように配列の製品を取得しますか?java Lambdasを使用したリストの製品を取得

result = array.Aggregate((a, b) => b * a);

編集:質問がより明確になる私は、C#で、それはこのようなものです知っています。

+1

このオペラティ「削減」と呼ばれます。チュートリアル:https://docs.oracle.com/javase/tutorial/collections/streams/reduction.html – dnault

答えて

4
list.stream().reduce(1, (a, b) -> a * b); 
+0

質問はちょっと混乱して、 'list'と言っていますが、' array'と書いてあるコードなので、両方を表示できますか? – Andreas

+0

他の言語の例は 'array'を使いますが、他のものはリストの産物を求めます。 –

+0

また、 'reduce((a、b) - > b * a).orElseXxx()'は技術的には表示されているC#バージョンに近いですが、どのorElseXxx()メソッドが適切かはわかりません。空の入力で呼び出されたときの結果を記述していないようです。 – Andreas

0

あなたはので、ここで、配列やリストの両方を言及は、両方のためにそれを行うだろうかです:

Integer intProduct = list.stream().reduce(1, (a, b) -> a * b); 
Integer intProduct = Arrays.stream(array).reduce(1, (a, b) -> a * b); // Integer[] 
int intProduct = Arrays.stream(array).reduce(1, (a, b) -> a * b); // int[] 

リスト/配列が空であるかもしれない場合、バージョンは1つの欠点を持っていること:最初の引数、など、リストや配列が空の場合、この場合1は、結果として返されますので、あなたはその行動をしたくない場合は、Optional<Integer>を返しますバージョンがあり、OptionalInt:

Optional<Integer> intProduct = list.stream().reduce((a, b) -> a * b); 
Optional<Integer> intProduct = Arrays.stream(array).reduce((a, b) -> a * b); // Integer[] 
OptionalInt intProduct = Arrays.stream(array).reduce((a, b) -> a * b); // int[] 
関連する問題