java - 创建二维数组行中最大值的数组

标签 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];

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/

相关文章:

java - 使用 Streams 将 PriorityQueue 转换为 Map

java - lambda 表达式和实例化方法引用之间的不同行为

java - 为什么要在 Java Stream 接口(interface)中重载 varargs 方法 of()?

java - 如何在android studio 3的dbflow中为GeneratedDatabaseHolder.java类设置前缀

java - 如何使用 Magento SOAP API2 检索可配置产品的关联产品?

java - 从 Web 应用程序中现有的 SOAP Web 服务迁移到 REST Web 服务

java - 将循环重构为android中的流

java - 如何在 Spring Boot 中过滤所有数据库操作的某些记录

java - 限制嵌入式 Jetty 中的上传大小

Java 流 flatMap 将第一级和第二级对象保留在流中