开发手册 欢迎您!
软件开发者资料库

Java Stream 常用聚合操作(sum、count、max、min、average)的使用

Stream是Java 8的新特性,基于lambda表达式,是对集合对象功能的增强,它专注于对集合对象进行各种高效、方便聚合操作或者大批量的数据操作,提高了编程效率和代码可读性。本文主要介绍Java Stream中常用聚合操作sum、count、max、min和average方法的使用。

1、使用Stream的sum()求和

可以使用Stream的sum()方法对数组、列表和字典进行求和,如下,

import java.util.*;import java.util.stream.Collectors;import java.util.stream.Stream;public class Main {   public static class Person {        int age;        Person (int age) {            this.age = age;        }        public int getAge() {            return age;        }        public void setAge(int age) {            this.age = age;        }  }  public static void main(String[] args) {    //数组    int[] intArray = new int[]{1, 2, 3,4};    var result = Arrays.stream(intArray).sum();    System.out.println(result);        //列表    List list = new ArrayList<>(Collections.nCopies(5, 0L));    list.set(0,1L);    list.set(1,2L);    list.set(2,3L);    list.set(3,4L);    list.set(4,5L);    System.out.println(list.stream().mapToDouble(e->e).sum());    List pList = new ArrayList<>(Collections.nCopies(5, new Person(1)));    System.out.println(pList.stream().mapToDouble(e->e.age).sum());         Map m1= new HashMap<>();    m1.put("C",1);    m1.put("Java",2);    m1.put("Python",3);    System.out.println(m1.values().stream().mapToDouble(d->d).sum());     System.exit(0); //success  }}

2、使用Stream的count()计数

可以使用Stream的count()对满足指定条件的元素进行计数,如下,

import java.util.*;import java.util.stream.Collectors;import java.util.stream.Stream;public class Main {   public static class Person {        int age;        Person (int age) {            this.age = age;        }        public int getAge() {            return age;        }        public void setAge(int age) {            this.age = age;        }  }  public static void main(String[] args) {    //数组    int[] intArray = new int[]{1, 2, 3,4};    var result = Arrays.stream(intArray).filter(e -> e>1).sum();    System.out.println(result);        //列表    List list = new ArrayList<>(Collections.nCopies(5, 0L));    list.set(0,1L);    list.set(1,2L);    list.set(2,3L);    list.set(3,4L);    list.set(4,5L);    System.out.println(list.stream().filter(e -> e % 2 == 0).count());    List pList = new ArrayList<>(Collections.nCopies(5, new Person(1)));    System.out.println(pList.stream().filter(e -> e.getAge() > 0).count());         Map m1= new HashMap    <>();    m1.put("C",1);    m1.put("Java",2);    m1.put("Python",3);    System.out.println(m1.values().stream().filter(e -> e % 2 == 0).count());     System.exit(0); //success  }}

3、使用Stream计算最大值、最小值和平均值

可以使用Stream的max()计算最大值 、min()计算最小值和average()计算平均值,如下,

import java.util.*;import java.util.stream.Collectors;import java.util.stream.Stream;import java.util.Comparator;public class Main {   public static class Person {        int age;        Person (int age) {            this.age = age;        }        public int getAge() {            return age;        }        public void setAge(int age) {            this.age = age;        }  }  public static void main(String[] args) {    //数组    int[] intArray = new int[]{1, 2, 3,4};    OptionalInt maxOptional = Arrays.stream(intArray).max();    OptionalInt minOptional = Arrays.stream(intArray).min();    OptionalDouble avgOptional = Arrays.stream(intArray).average();    minOptional.ifPresent(e -> System.out.println("Min: " + e));    maxOptional.ifPresent(e -> System.out.println("Max: " + e));    avgOptional.ifPresent(e -> System.out.println("Avg: " + e));    //list    List list = Arrays.asList(new Person(11),new Person(22), new Person(33), new Person(44), new Person(55));    Optional maxListOptional = list.stream().max(Comparator.comparingInt(Person::getAge));    Optional minListOptional = list.stream().min(Comparator.comparingInt(Person::getAge));    OptionalDouble avgListOptional = list.stream().mapToDouble(e->e.age).average();    minListOptional.ifPresent(e -> System.out.println("Min: " + e.getAge()));    maxListOptional.ifPresent(e -> System.out.println("Max: " + e.getAge()));    avgListOptional.ifPresent(e -> System.out.println("Avg: " + e));    System.exit(0); //success  }}