例如,我创建了一个二维整数数组
int[][] source = new int[][]{
new int[]{1, 2, 3, 4},
new int[]{-3, -7, -5, -5},
new int[]{11, 3, 7, 9},
new int[]{121, -41, 515, -466}
};
现在我正在创建一个跨行的最大值数组,如下所示:
int[] rowMax = new int[source.length];
for (int i = 0; i < source.length; i++) {
int m = Integer.MIN_VALUE;
for (int j = 0; j < source[0].length; j++) {
if (source[i][j] > m) {
m = source[i][j];
}
}
rowMax[i] = m;
}
这对我来说效果很好。通过流尝试一下我可以发现 Finding the max/min value in an array of primitives using Java ,在这种情况下
int max = Arrays.stream(arr).max().getAsInt();
我可以将我的内部循环更新为:
int[] rowMax = new int[source.length];
for (int i = 0; i < source.length; i++) {
rowMax[i] = Arrays.stream(source[i]).max().getAsInt();
}
但我不确定如何在可能的情况下进一步使用流来完成完整的 int[] rowMax
。这可以转换吗?
最佳答案
您可以尝试更新迭代以迭代 Stream<int[]>
Arrays.stream(source) // convert to Stream<int[]>
然后使用您的代码映射到每个 int[]
的最大值使用 Stream.mapToInt
如
mapToInt(ints -> Arrays.stream(ints).max().getAsInt())
然后使用 IntStream.toArray
将它们收集回数组
toArray()
看起来完全像
int[] rowMax = Arrays.stream(source)
.mapToInt(ints -> Arrays.stream(ints).max().getAsInt())
.toArray();
<小时/>
恕我直言,尽管这也可以表示为:
int[] rowMax = Stream.of(source) // Stream<int[]> for all rows
.mapToInt(ints ->
Stream.of(ints) // Stream<int[]> for each row level
.flatMapToInt(Arrays::stream) // IntStream
.max().orElse(Integer.MIN_VALUE)) // return max per int[] with default value
.toArray(); // to array
关于java - 创建二维数组行中最大值的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53916125/