簡體   English   中英

Java中的二維數組流減少

[英]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);

其中0Ddouble精度字面量,而Double::sum用於組合2個累加器。

另外,這樣做可能更方便:

double result = Arrays.stream(myArray)
    .flatMapToDouble(DoubleStream::of)
    .sum();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM