JAVA8中stream()及收集器常用方法举例

中间操作:filter()、distinct()、sorted()、map()、flatMap()等,一般是对数据集的整理(过滤、排序、匹配、抽取等),将一个stream转换成另一个stream。
终止方法:往往是完成对数据集中数据的处理,如forEach(),还有allMatch()、anyMatch()、findAny()、 findFirst(),数值计算类的方法有sum、max、min、average等等。终止方法也可以是对集合的处理,如reduce()、 collect()等等。reduce()方法的处理方式一般是每次都产生新的数据集,而collect()方法是在原数据集的基础上进行更新,过程中不产生新的数据集。

   public class user{
            String userId;
            String userName;
            int age;
            int sex; //male 1 female 2
        }
        
   List<User> userList = new ArrayList<User>();

获得所有用户中年龄最大或最小的

Optional<User> maxAgeUser = userList.stream().max(Comparator.comparingInt(User::getAge));
Optional<User> minAgeUser = userList.stream().min(Comparator.comparingInt(User::getAge));

获得所有用户年龄平均值

Double ageAvg = list.stream().collect(Collectors.averagingInt(User::getAge));

获得所有用户年龄总和

//利用IntSummaryStatistic也可以计算最大值最小值平均值这些
IntSummaryStatistics summaryStatistics = list.stream().collect(Collectors.summarizingInt(User::getAge));
int sum = summaryStatistics.getSum();
//利用summingInt
int sum = list.stream().collect(Collectors.summingInt(User::getAge));
//利用mapToInt
int sum = list.stream().mapToInt(a -> a.getAge()).sum();
//利用reduce
int sum = list.stream().map(User::getAge).reduce((a,b)->a+b);

将所有用户用户名拼接字符串并逗号分隔

//利用joining
String usersName = list.stream().map(User::getAge).collect(Collectors.joining(", "));
//利用reduce
String usersName = list.stream().map(User::getUserName).reduce((a,b)->a+","+b);

按性别分类后的统计

//按性别统计人数
Map<Integer, Integer> mapBySexCount = list.stream().collect(Collectors.groupingBy(User::getSex,Collectors.summingInt(p -> 1)));
//按性别统计18岁以上人群的年龄平均值
Map<Integer, Double> mapBySexAgeAvg = list.stream().filter(a->a.getAge() > 18).collect(Collectors.groupingBy(User::getSex,Collectors.averagingInt(User::getAge)));
//按性别获取所有用户的名称字符串逗号分隔
Map<Integer, String> mapBySexNames= list.stream().collect(Collectors.groupingBy(User::getSex,Collectors.reducing("",User::getUserName,(a,b)->a+","+b)));
//按性别分组后按年龄倒序
Map<Integer, List<User>> mapBySexSortByAge = list.stream().sorted(Comparator.comparing(User::getAge).reversed()).collect(Collectors.groupingBy(User::getSex,Collectors.toList()));

关于常见参数的理解:

  • U identity 可以理解为一个聚合操作的初始值,比如聚合目标为一个字符串,则identity可为“姓名:”,姓名:张三,李四,周五。
  • BinaryOperator op 函数式接口,可以指定一段lambda表达式,或者方法的引用。
  • java.util.function.Function<? super T, ? extends U> mapper 一个方法的引用,该方法作为返回某个属性值的映射。
  • java.util.stream.Collector<? super T, A, R> collector 一个收集器,例如Collectors.groupingBy()。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值