java - 使用流获取二维数组中每列的结果
问题描述
我是 API 流的新手,我想对 2D 数组进行一些操作
以下代码是我想要做的简化版本。
我有一个值数组:
int values[][] = new int[][] {{1,2},{3,4},{5,6}};
我想处理每列的值并得到
int result[] = {x,y}
例如,如果我做一个总和,它应该得到我
result[] = {9, 12}
提前感谢您的帮助
解决方案
尝试这个。
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));
编辑:
关于您关于容纳不同数量的列的其他问题。是的,你可以做到。但仅仅因为你可以并不意味着你应该或者这是最好的方式。下面是一个简单的方法,可以对任何二维数组中的整数求和,而不管行长如何。它甚至可以处理参差不齐的数组。请注意,这总结了列,先到先得,因为它们被视为相对于彼此左对齐。
初始化一个不规则(参差不齐或不同的行长)数组
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;
});
推荐阅读
- kubernetes - Splunk Universal Forwarder 作为 kubernetes 中的 sidecar
- python - 关于 h2o 中随机森林概率校准的问题
- cassandra - Cassandra - 获取特定时间范围内的所有数据
- statsmodels - ARIMA 模型:plot_diagnostics 共享错误
- android - 循环阻止异步请求被执行。为什么以及如何解决?
- c++ - 指向指针的指针的 reinterpret_cast
- flutter - Flutter 中使用 Http Post 上传正文
- javascript - reactjs处理滚动元素以查看其是否可见
- python-2.7 - 传递函数,为什么需要 lambda
- r - 如何在 Rinto 数据框中解析复杂的 xml?