在Java 8中查找列表的最大值,最小值,总和和平均值
如何在Java 8中查找以下列表中数字的最大值,最小值,总和和平均值?
List primes = Arrays.asList(2, 3, 5, 7, 11, 13, 17, 19, 23, 29);
有一个类名IntSummaryStatistics
例如:
List primes = Arrays.asList(2, 3, 5, 7, 11, 13, 17, 19, 23, 29); IntSummaryStatistics stats = primes.stream() .mapToInt((x) -> x) .summaryStatistics(); System.out.println(stats);
输出:
IntSummaryStatistics{count=10, sum=129, min=2, average=12.900000, max=29}
希望能帮助到你
阅读有关IntSummaryStatistics的信息
我认为知道一个以上的问题解决方案来挑选最适合问题的权利总是好的。 以下是其他一些解决方案:
final List primes = Arrays.asList(2, 3, 5, 7, 11, 13, 17, 19, 23, 29);
找到最大值
// MAX -- Solution 1 primes.stream() // .max(Comparator.comparing(i -> i)) // .ifPresent(max -> System.out.println("Maximum found is " + max)); // MAX -- Solution 2 primes.stream() // .max((i1, i2) -> Integer.compare(i1, i2)) // .ifPresent(max -> System.out.println("Maximum found is " + max)); // MAX -- Solution 3 int max = Integer.MIN_VALUE; for (int i : primes) { max = (i > max) ? i : max; } if (max == Integer.MIN_VALUE) { System.out.println("No result found"); } else { System.out.println("Maximum found is " + max); } // MAX -- Solution 4 max = Collections.max(primes); System.out.println("Maximum found is " + max);
找到最低限度
// MIN -- Solution 1 primes.stream() // .min(Comparator.comparing(i -> i)) // .ifPresent(min -> System.out.println("Minimum found is " + min)); // MIN -- Solution 2 primes.stream() // .max(Comparator.comparing(i -> -i)) // .ifPresent(min -> System.out.println("Minimum found is " + min)); // MIN -- Solution 3 int min = Integer.MAX_VALUE; for (int i : primes) { min = (i < min) ? i : min; } if (min == Integer.MAX_VALUE) { System.out.println("No result found"); } else { System.out.println("Minimum found is " + min); } // MIN -- Solution 4 min = Collections.min(primes); System.out.println("Minimum found is " + min);
找到平均值
// AVERAGE -- Solution 1 primes.stream() // .mapToInt(i -> i) // .average() // .ifPresent(avg -> System.out.println("Average found is " + avg)); // AVERAGE -- Solution 2 int sum = 0; for (int i : primes) { sum+=i; } if(primes.isEmpty()){ System.out.println("List is empty"); } else { System.out.println("Average found is " + sum/(float)primes.size()); }
找到总和
// SUM -- Solution 1 int sum1 = primes.stream() // .mapToInt(i -> i) // .sum(); // System.out.println("Sum found is " + sum1); // SUM -- Solution 2 int sum2 = 0; for (int i : primes) { sum2+=i; } System.out.println("Sum found is " + sum2);
但请尽可能地使用,所以我最喜欢的是:
// Find a maximum with java.Collections Collections.max(primes); // Find a minimum with java.Collections Collections.min(primes);
顺便说一句,Oracle Tutorial是一个金矿: https : //docs.oracle.com/javase/tutorial/collections/streams/reduction.html