使用java Lambdas获取列表的产品

时间:2016-05-13 23:22:16

标签: java lambda java-stream

如何使用java Lambdas获取数组的产品。我在C#中知道它是这样的:

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

编辑:让问题更清晰。

2 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分: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[]