web-dev-qa-db-fra.com

Trouver le maximum, le minimum, la somme et la moyenne d'une liste dans Java 8

Comment trouver le maximum, le minimum, la somme et la moyenne des nombres dans la liste suivante dans Java 8?

List<Integer> primes = Arrays.asList(2, 3, 5, 7, 11, 13, 17, 19, 23, 29);
13
DrJava

Il y a un nom de classe, IntSummaryStatistics

Par exemple:

  List<Integer> 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);

Production:

   IntSummaryStatistics{count=10, sum=129, min=2, average=12.900000, max=29}

J'espère que ça aide

En savoir plus sur IntSummaryStatistics

71
Kick Buttowski

Je pense qu'il est toujours bon de connaître plus d'une solution à un problème pour choisir celle qui convient le mieux au problème. Voici quelques autres solutions:

final List<Integer> primes = Arrays.asList(2, 3, 5, 7, 11, 13, 17, 19, 23, 29);

Trouver le maximum

// 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);

Trouver le minimum

// 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);

Trouvez la moyenne

// 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());         
}

Trouvez la somme

// 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);

Mais soyez aussi concis que possible, donc mes favoris sont:

// Find a maximum with Java.Collections
Collections.max(primes);

// Find a minimum with Java.Collections 
Collections.min(primes);

Soit dit en passant, Oracle Tutorial est une mine d'or: https://docs.Oracle.com/javase/tutorial/collections/streams/reduction.html

9
KeyMaker00