2016-05-13 46 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[]