3 回答
TA贡献1835条经验 获得超7个赞
尝试这个。
int values[][] = new int[][] { { 1, 2
}, { 3, 4
}, { 5, 6
}
};
int[] v = Arrays.stream(values).reduce(new int[] { 0, 0
}, (a, b) ->
{
a[0] += b[0];
a[1] += b[1];
return a;
});
System.out.println(Arrays.toString(v));
编辑:
关于您关于容纳不同数量的列的其他问题。是的,你可以做到。但仅仅因为你可以这样做并不意味着你应该这样做或者这是最好的方法。下面是一个简单的方法,可以对任何 2D 数组中的整数进行求和,而不管行长度如何。它甚至可以处理参差不齐的数组。请注意,这对列进行了总结,先到先得,因为它们被视为相对于彼此左对齐。
初始化一个不规则(参差不齐或行长不同)的数组
int values[][] = new int[][] { { 1
}, { 20, 3
}, { 1, 2, 4
}, { 3, 4, 10
}, { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10
}
};
现在使用以下方法计算总和。
public static int[] sumColumns(int[][] vals) {
// compute the maximum row length (most columns)
int maxColumns = 0;
for (int r = 0; r < vals.length; r++) {
maxColumns = Math.max(maxColumns, vals[r].length);
}
// use that to initialize the return array
int[] sums = new int[maxColumns];
//now just iterate over the rows and columns
// calculating the sum.
for (int r = 0; r < vals.length; r++) {
for (int c = 0; c < vals[r].length; c++) {
sums[c] += vals[r][c];
}
}
return sums;
}
要使用流创建任何矩形矩阵,请执行以下操作:
int[] result2 =
Arrays.stream(values).reduce(new int[values[0].length], (a, b) ->
{
for (int i = 0; i < values[0].length; ++i) {
a[i] += b[i];
}
return a;
});
TA贡献1843条经验 获得超7个赞
我的问题不够精确(抱歉我的英语水平很差)。
在第一个流示例中,它基于每行有 2 个值的事实。在我的 cas 中,我将始终具有相同数量的列,但我不知道编码时有多少列。
那么有了变量“size”,代码将如何修改?
int values[][] = new int[][] {
{1,2,3},
{4,5,6},
{7,8,9}
};
int size = 3;
int[] result2 = Arrays.stream(arr)
.reduce(new int[size],
(a, b) -> new int[] { a[0] + b[0], a[1] + b[1] });
System.out.println(Arrays.toString(result2));
我更关注代码的“a[0] + b[0]”部分
编辑:我终于得到了一些东西,但我想我可以不用for循环:
int values[][] = new int[][] {
{1,2,3},
{4,5,6},
{7,8,9}
};
int size = 3;
int[] result2 = Arrays.stream(values)
.reduce(new int[size],
(a, b) -> {
int[] myInt = new int[size];
for (int i =0; i < size ; ++i) {
myInt[i] = a[i] + b[i];
}
return myInt;
});
System.out.println(Arrays.toString(result2));
TA贡献1802条经验 获得超5个赞
这是 的一个很好的用例Collectors.teeing
,但它仅在 Java 12 中可用。为了以防万一,下面是一个用法示例:
int[] res = Arrays.stream(values) .collect( Collectors.teeing( Collectors.summingInt(arr -> arr[0]), Collectors.summingInt(arr -> arr[1]), (a, b) -> new int[] {a, b}));
添加回答
举报