簡體   English   中英

IntStream用於求和2D數組

[英]IntStream to sum a 2D array

使用IntStream對2D數組中的一系列元素求和的語法是什么?

對於1D數組,我使用以下語法:

int totalElementsInArray = 0;

totalElementsInarray = IntStream.of(myArray).sum();

例如,假設我有一個2D數組:

int[][] my2DArray = new int[17][4];

使用IntStream對第0行的第0-16列求和時的語法是什么?

int totalElementsInArray = 0;

totalElementsInarray = IntStream.of(my2DArray[0 through 16][0]).sum();

您只需要通過獲取第一個元素將每個子數組映射到int

import java.util.*;
import java.util.stream.*; 

class Test {
    public static void main(String args[]) {
        int[][] data = {
            { 1, 2, 3 },
            { 4, 5, 6 }
        };

        int sum = Arrays.stream(data)
                        .mapToInt(arr -> arr[0])
                        .sum();
        System.out.println(sum); // 5, i.e. data[0][0] + data[1][0]
    } 
}

換一種說法:

  • data轉換為Stream<int[]> (即簡單的int數組流)
  • 將每個數組映射到其第一個元素,因此我們最終得到一個IntStream
  • 匯總流

我更喜歡這種方法而不是使用range的方法,因為似乎不需要考慮子數組的索引。 例如,如果你只有一個Iterable<int[]> arrays你仍然可以使用StreamSupport.stream(arrays.spliterator(), false).mapToInt(arr -> arr[0]).sum() ,而范圍方法需要多次迭代。

一種方法是在索引上創建一個IntStream

IntStream.range(0, my2DArray.length).map(i -> my2DArray[i][0]).sum();

或者只保留Arrays.stream結果的第一行:

Arrays.stream(my2DArray).mapToInt(a -> a[0]).sum();

你可以這樣做

IntStream.range(0, 17)
         .map(i -> my2DArray[i][0])
         .sum();

暫無
暫無

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

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