我是新手在java中使用流,所以这是我的问题。 我有一个double [] [],其中我想要执行元素的总和,因为它我跟随和Cro Linq类似,但似乎不起作用。
Arrays.stream(myArray).reduce(0,(acc, i) -> acc + Arrays.stream(i).sum());
错误是acc似乎是double [],所以它不能执行double [] + double。 在C#Linq中,假定累加器与种子的类型相同(在这种情况下为0)。我错过了什么? 提前谢谢。
答案 0 :(得分:5)
如果查看reduce
的签名,则标识的类型必须是流的元素的类型。在这种情况下,这将是double[]
。这也会使acc
类型为double[]
。
有一个过载,您可以提供不同类型的累加器,但您还需要通过组合器,以组合2个累加器。
你可以这样做:
double result = Arrays.stream(myArray)
.reduce(0D, (acc, i) -> acc + Arrays.stream(i).sum(), Double::sum);
其中0D
是double
字面值,而Double::sum
用于合并2个累加器。
或者,这样做可能更方便:
double result = Arrays.stream(myArray)
.flatMapToDouble(DoubleStream::of)
.sum();