Find maximum, minimum, sum and average of a list in Java 8

后端 未结 3 1227
情书的邮戳
情书的邮戳 2020-11-27 05:55

How to find the maximum, minimum, sum and average of the numbers in the following list in Java 8?

List primes = Arrays.asList(2, 3, 5, 7, 11,          


        
相关标签:
3条回答
  • 2020-11-27 06:23

    There is a class name, IntSummaryStatistics

    For example:

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

    Output:

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

    Hope it helps

    Read about IntSummaryStatistics

    0 讨论(0)
  • 2020-11-27 06:35

    I think it's always good to know more than one solution to a problem to pick the right that suits the problem the most. Here are some other solutions:

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

    Find the 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);
    

    Find the 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);
    

    Find the average

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

    Find the sum

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

    But be as consice as possible, so my favourites are:

    // Find a maximum with java.Collections
    Collections.max(primes);
    
    // Find a minimum with java.Collections 
    Collections.min(primes);
    

    By the way, Oracle Tutorial is a golden mine: https://docs.oracle.com/javase/tutorial/collections/streams/reduction.html

    0 讨论(0)
  • 2020-11-27 06:35
        //By using lambda
        int sum = primes.stream().mapToInt(a->a).sum();
        System.out.println(sum);
        int min = primes.stream().mapToInt(a->a).min().orElse(0);
        System.out.println(min);
        int max = primes.stream().mapToInt(a->a).max().orElse(0);
        System.out.println(max);
        double average = primes.stream().mapToInt(a->a).average().orElse(0);
        System.out.println(average);
        
        //By using Collections
        System.out.println(Collections.min(primes));
        System.out.println(Collections.max(primes));
    
    0 讨论(0)
提交回复
热议问题