java8 stream的终端操作
文章目录groupby分组groupBy为什么有3个方法呢?reduce规约(缩小、减小)终止操作是一大类collectors等都属于终止操作。groupby分组groupBy为什么有3个方法呢?是同一方法的3种重载。一个参数Collectors.groupingBy(Person::getCity// 1. 按城市分组)两个参数Collectors.groupingBy(Person::getCity,// 1. 按城市分组Collectors.counting()// 2. 统计数量)三个参数Collectors.groupingBy(Person::getCity,// 1. 按城市分组TreeMap::new,// 2. 指定返回 TreeMap (自动按Key排序)Collectors.counting()// 3. 统计数量)reduce规约(缩小、减小)reduce是用来执行聚合操作的。参数BinaryOperator接口继承了BiFunction接口简单的说就是传入2个参数返回一个参数。 2个入参和一个出参类型都相同。直接上代码DatapublicclassUser{privateStringusername;privateStringpassword;privateIntegerage;publicUser(){}publicUser(Stringusername,Stringpassword,Integerage){this.usernameusername;this.passwordpassword;this.ageage;}publicstaticvoidmain(finalString...args){ArrayListUserlistnewArrayList();list.add(newUser(liubei,111,40));list.add(newUser(zhangfei,222,30));list.add(newUser(guanyu,333,35));//reduce 需要传入一个BinaryOperator接口继承了BiFunction接口//简单说 就是需要传入2个同类型参数返回同类型的参数BinaryOperatorIntegeradd(n1,n2)-n1n2;BinaryOperatorIntegerminus(n1,n2)-n1-n2;list.stream().map(n-n.getAge()).reduce((a,b)-a*b).ifPresent(n-System.out.println(n));// 乘法list.stream().map(n-n.getAge()).reduce(add).ifPresent(n-System.out.println(n));// 加法list.stream().map(n-n.getAge()).reduce(minus).ifPresent(n-System.out.println(n));// 减法}}