2016-05-13 91 views
-4

如何使用java Lambdas獲得數組的產品。我知道C#它是這樣的:使用java獲取產品列表Lambdas

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

編輯:作出這個問題更加清晰。

+1

將被作爲結果返回這操作上被稱爲「減少」。這裏的教程:https://docs.oracle.com/javase/tutorial/collections/streams/reduction.html – dnault

回答

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

問題有點混亂,說'列表',但代碼說'數組',所以也許顯示兩者? – Andreas

+0

來自另一種語言的示例使用'array',但其他所有內容都要求列表的產品。 –

+0

此外,'reduce((a,b) - > b * a).orElseXxx()'在技術上更接近所示的C#版本,儘管我不知道哪個'orElseXxx()'方法是合適的,因爲C#文檔在空輸入上調用時似乎沒有描述結果。 – 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在這種情況下,如果列表或數組是空的,所以如果你不希望這樣的行爲,有一個版本,將返回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[]