在这里有人问我关于C#的相同问题,并且我发现使用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
但这不如简单的循环有效,因为您计算了两次。
当然,您可以添加中间运算来存储总和列表,然后根据该总和来计算最小/最大。
// 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);
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句