使用IntStream对2D数组中的一系列元素求和的语法是什么?
对于1D数组,我使用以下语法:
Find what
例如,假设我有一个2D数组:
Replace with
使用IntStream对第0行的第0-16列进行求和时的语法是什么?
int totalElementsInArray = 0;
totalElementsInarray = IntStream.of(myArray).sum();
答案 0 :(得分:6)
您只需要通过获取第一个元素将每个子数组映射到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()
,而范围方法则需要多次迭代。
答案 1 :(得分:4)
一种方法是在索引上创建IntStream
IntStream.range(0, my2DArray.length).map(i -> my2DArray[i][0]).sum();
或仅保留Arrays.stream
结果的第一行:
Arrays.stream(my2DArray).mapToInt(a -> a[0]).sum();
答案 2 :(得分:2)
你可以这样做
IntStream.range(0, 17)
.map(i -> my2DArray[i][0])
.sum();