作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我被问到了关于 c# 的同样问题 here我发现通过使用 linq 你可以轻松地做到这一点。
但是既然 java 中的 linq 没有其他选择,我该如何简单地做到这一点呢?
最佳答案
如果您想要类似于 LINQ 的功能,可以使用 Java8 流来实现:
// prepare arrays
List<int[][]> kidsL = new ArrayList<>();
int[][] square1 = new int[8][8];
int[][] square2 = new int[8][8];
int[][] square3 = new int[8][8];
for (int i = 0; i < 8; i++)
for (int j = 0; j < 8; j++) {
square1[i][j] = 1;
square2[i][j] = 2;
square3[i][j] = 3;
}
kidsL.add(square1);
kidsL.add(square2);
kidsL.add(square3);
// find min
kidsL.stream()
.mapToInt(a -> Arrays.stream(a).flatMapToInt(Arrays::stream).sum())
.min()
.ifPresent(System.err::println);
// find max
kidsL.stream()
.mapToInt(a -> Arrays.stream(a).flatMapToInt(Arrays::stream).sum())
.max()
.ifPresent(System.err::println);
它打印:
64
192
但它的效率不如简单的 for 循环,因为您计算了两次总和。
当然,您可以添加中间操作来存储总和列表,然后根据该结果计算最小值/最大值。
// intermediate list of sums
List<Integer> sums = kidsL.stream()
.mapToInt(a -> Arrays.stream(a).flatMapToInt(Arrays::stream).sum())
.boxed().collect(Collectors.toList());
sums.stream().mapToInt(i -> i)
.min()
.ifPresent(System.err::println);
sums.stream().mapToInt(i -> i)
.max()
.ifPresent(System.err::println);
关于java - 如何在java中获取二维数组列表的最大值/最小值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41411165/
我是一名优秀的程序员,十分优秀!