例如,我创建了一个二维整数数组
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
。可以完全转换吗?
答案 0 :(得分:2)
您可以尝试更新迭代以迭代Stream<int[]>
Arrays.stream(source) // convert to Stream<int[]>
然后使用您的代码映射,将Stream.mapToInt
用作
int[]
的最大值
mapToInt(ints -> Arrays.stream(ints).max().getAsInt())
将它们收集回数组
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
答案 1 :(得分:1)
您可以执行以下操作:
int[] maxNumbers = Arrays.stream(source) //Stream<int[]>
.mapToInt(a -> Arrays.stream(a).max().getAsInt()) // IntStream
.toArray();// int[]
Arrays.stream(source)
从二维数组创建一个流int[]
)映射到最大值