Java 在二维数组的行中创建最大值数组

Java 在二维数组的行中创建最大值数组,java,java-stream,Java,Java Stream,例如,我创建了一个二维整数数组 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];

例如,我创建了一个二维整数数组

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;
}
我可以将我的内部循环更新为:

int[] rowMax = new int[source.length];
for (int i = 0; i < source.length; i++) {
  rowMax[i] = Arrays.stream(source[i]).max().getAsInt();
}
int[]rowMax=newint[source.length];
for(int i=0;i

但我不确定如何在可能的情况下进一步使用流来完成
int[]rowMax
。这是否可以转换?

您可以尝试更新迭代以迭代

然后使用

看起来就像

int[] rowMax = Arrays.stream(source)
                     .mapToInt(ints -> Arrays.stream(ints).max().getAsInt())
                     .toArray();

IMHO,但这也可以表示为:

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
int[]rowMax=Stream.of(source)//所有行的流
.mapToInt(整数->
Stream.of(ints)//每行级别的流
.flatMapToInt(数组::流)//IntStream
.max().orElse(Integer.MIN_值))//使用默认值返回max per int[]
.toArray();//排列

您可以尝试更新迭代以迭代

然后使用

看起来就像

int[] rowMax = Arrays.stream(source)
                     .mapToInt(ints -> Arrays.stream(ints).max().getAsInt())
                     .toArray();

IMHO,但这也可以表示为:

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
int[]rowMax=Stream.of(source)//所有行的流
.mapToInt(整数->
Stream.of(ints)//每行级别的流
.flatMapToInt(数组::流)//IntStream
.max().orElse(Integer.MIN_值))//使用默认值返回max per int[]
.toArray();//排列

您可以按如下方式执行:

int[] maxNumbers = Arrays.stream(source) //Stream<int[]>
                         .mapToInt(a -> Arrays.stream(a).max().getAsInt()) // IntStream
                         .toArray();// int[]
int[]maxNumbers=Arrays.stream(源)//stream
.mapToInt(a->Arrays.stream(a).max().getAsInt())//IntStream
.toArray();//int[]
  • 通过
    数组从二维数组创建流。流(源)
  • 将每行(
    int[]
    )映射到最大值
  • 将结果收集到数组中

您可以按如下方式执行:

int[] maxNumbers = Arrays.stream(source) //Stream<int[]>
                         .mapToInt(a -> Arrays.stream(a).max().getAsInt()) // IntStream
                         .toArray();// int[]
int[]maxNumbers=Arrays.stream(源)//stream
.mapToInt(a->Arrays.stream(a).max().getAsInt())//IntStream
.toArray();//int[]
  • 通过
    数组从二维数组创建流。流(源)
  • 将每行(
    int[]
    )映射到最大值
  • 将结果收集到数组中

是否有理由将此标记为
jshell
?如果与问题没有直接关系,请删除您的问题。谢谢:)你为什么在这里加上
jshell
?如果与问题没有直接关系,请删除您的问题。谢谢:)
int[] maxNumbers = Arrays.stream(source) //Stream<int[]>
                         .mapToInt(a -> Arrays.stream(a).max().getAsInt()) // IntStream
                         .toArray();// int[]