设为首页 加入收藏

TOP

java Stream流练习(五)
2023-07-25 21:30:13 】 浏览:89
Tags:java Stream
ouble
  • 统计以上所有:summarizingIntsummarizingLongsummarizingDouble
  • List<Integer> list = Arrays.asList(1, 2, 3, 2, 5, 3, 9, 8, 7, 6, 29, 10, 22);
    
    // count
    long count = list.stream().filter(value -> value > 10).count();
    log.info(String.format("list中元素>10的个数为:%d", count));
    
    // average
    Double average = list.stream().filter(value -> value > 1).collect(Collectors.averagingInt(Integer::intValue));
    log.info(String.format("list中元素>1的元素平均值为:%.2f", average));
    
    List<User> userList1 = Arrays.asList(
            new User(1, "xww", "女", 22),
            new User(2, "zgx", "男", 22),
            new User(3, "whb", "男", 23),
            new User(4, "gg", "男", 30),
            new User(5, "yda", "男", 22),
            new User(6, "bhm", "女", 23),
            new User(7, "lsn", "女", 22),
            new User(8, "ksj", "女", 22)
    );
    
    Double averageAge = userList1.stream()
            .filter(user -> user.getSex().equals("男"))
            .map(User::getAge)
            .collect(Collectors.averagingInt(Integer::intValue));
    log.info(String.format("男用户的平均年龄为:%d 岁", averageAge.intValue()));
    
    // mapToInt
    int ageSum = userList1.stream()
            .filter(user -> user.getSex().equals("女"))
            .mapToInt(User::getAge)
            .sum();
    log.info(String.format("女用户的年龄之和为:%d", ageSum));
    
    // summarizingInt 统计 计数、总和、最小值、平均值、最大值
    IntSummaryStatistics recording = userList1.stream()
            .filter(user -> user.getSex().equals("男"))
            .collect(Collectors.summarizingInt(User::getAge));
    log.info(String.format("记录所有男用户的年龄各项值,结果为:%s", recording));
    

    6.3 分组(partitioningBy/groupingBy)

    • 分区:将stream按条件分为两个Map,比如员工按薪资是否高于8000分为两部分。
    • 分组:将集合分为多个Map,比如员工按性别分组。有单级分组和多级分组。
    partitioningBy
    List<Integer> list = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 20, 37, 49, 243, 30);
    
    // partitioningBy
    Map<Boolean, List<Integer>> collect1 = list.stream()
            .collect(Collectors.partitioningBy(value -> value > 20));
    log.info(String.format("元素值是否大于20进行分组,结果为:%s", collect1));
    
    collect1.forEach((key, value) -> {
        log.info(String.format("元素值是否大于20进行分组,结果为:%s:%s", key, value));
    });
    

    groupingBy

    List<User> userList = Arrays.asList(
            new User(1, "xww", "女", 22),
            new User(2, "zgx", "男", 21),
            new User(3, "whb", "男", 23),
            new User(4, "gg", "男", 30),
            new User(5, "yda", "男", 22),
            new User(6, "bhm", "女", 23),
            new User(7, "lsn", "女", 22),
            new User(8, "ksj", "女", 22)
    );
    
    // groupingBy
    Map<String, List<User>> collect2 = userList.stream()
            .collect(Collectors.groupingBy(User::getSex));
    log.info(String.format("根据性别对用户进行分组,结果为:%s", collect2));
    
    collect2.forEach((key, user) -> {
        log.info(String.format("根据性别对用户进行分组,结果为:%s:%s", key, user));
    });
    

    6.4 接合(joining)

    joining可以将stream中的元素用特定的连接符(没有的话,则直接连接)连接成一个字符串。

    List<Integer> list = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 20, 37, 49, 243, 30);
    String collect = list.stream()
            .map(Object::toString)
            .collect(Collectors.joining("——&qu
    首页 上一页 2 3 4 5 6 下一页 尾页 5/6/6
    】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
    上一篇多线程 & 反射 & 注解 & JDBC 核.. 下一篇Java多线程(7):JUC(下)

    最新文章

    热门文章

    Hot 文章

    Python

    C 语言

    C++基础

    大数据基础

    linux编程基础

    C/C++面试题目