[英]2D Array stream reduce in java
我是在Java中使用流的新手,所以這是我的問題。 我有一個double [] [],我想在其中進行元素的求和,因為我對此非常關注,並且提出了類似於C#Linq的方法,但似乎不起作用。
Arrays.stream(myArray).reduce(0,(acc, i) -> acc + Arrays.stream(i).sum());
錯誤是acc似乎是double [],因此它無法執行double [] + double。 在C#Linq中,將累加器假定為與種子相同的類型(在這種情況下為0)。 我想念什么? 提前致謝。
如果查看reduce
的簽名,則標識的類型必須是流元素的類型。 在這種情況下,它將是double[]
。 這也將給acc
類型double[]
。
在過載的情況下,您可以提供其他類型的累加器,但是還需要傳遞一個組合器,以組合兩個累加器。
你可以這樣做:
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();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.