Java8新特性之Stream–collect方法

collect方法
收集(collect)
collect,收集,可以说是内容最繁多、功能最丰富的部分了。从字面上去理解,就是把一个流收集起来,最终可以是收集成一个值也可以收集成一个新的集合。
collect主要依赖java.util.stream.Collectors类内置的静态方法。

归集(toList/toSet/toMap)
因为流不存储数据,那么在流中的数据完成处理后,需要将流中的数据重新归集到新的集合里。 toList、toSet和toMap比较常用,另外还有toCollection、toConcurrentMap等复杂一些的用法。

List

Set

List

Map personMap =
personList.stream().filter(p -> p.getSalary() > 8000).collect(Collectors.toMap(Person::getName,
p -> p));
System.out.println(“产生的新的map集合是:” + personMap);

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
统计(count/averaging)
Collectors提供了一系列用于数据统计的静态方法:

计数:count
平均值:averagingInt、averagingLong、averagingDouble
最值:maxBy、minBy
求和:summingInt、summingLong、summingDouble
统计以上所有:summarizingInt、summarizingLong、summarizingDouble
1
2
3
4
5
/*
* 案例:统计员工人数、平均工资、工资总额、最高工资。
/
// 求总数
Long count = personList.stream().collect(Collectors.counting());
System.out.println(“员工总数:” + count);
// 求平均工资
Double avgSalary = personList.stream().collect(Collectors.averagingDouble(Person::getSalary));
System.out.println(“员工平均工资:” + avgSalary);
// 求工资之和
Integer sumSalary = personList.stream().collect(Collectors.summingInt(Person::getSalary));
System.out.println(“员工工资总和:” + sumSalary);
// 一次性统计所有信息
DoubleSummaryStatistics collect = personList.stream().collect(Collectors.summarizingDouble(Person::getSalary));
System.out.println(“员工工资所有统计:” + collect);

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
分组(partitioningBy/groupingBy)
分区:将stream按条件分为两个Map,比如员工按薪资是否高于8000分为两部分。
分组:将集合分为多个Map,比如员工按性别分组。有单级分组和多级分组。
1
2
/*
* 案例:将员工按薪资是否高于8000分为两部分;将员工按性别和地区分组
/
// 将员工按薪资是否高于8000分组
Map

String names = personList.stream().map(p -> p.getName()).collect(Collectors.joining(“,”));
System.out.println(“所有员工的姓名:” + names);
List

// 每个员工减去起征点后的薪资之和
Integer sumsal = personList.stream().collect(Collectors.reducing(0, Person::getSalary, (x, y) -> x + y – 5000));
System.out.println(“员工扣税薪资总和:” + sumsal);
// stream的reduce
Integer sum = personList.stream().map(Person::getSalary).reduce(0, (x, y) -> x + y – 5000);
System.out.println(“—-员工扣税薪资总和:” + sum);
1
2
3
4
5
6
排序(sorted)
sorted,中间操作。有两种排序:

sorted():自然排序,流中元素需实现Comparable接口
sorted(Comparator com):Comparator排序器自定义排序
1
2
/*
* 案例:将员工按工资由高到低(工资一样则按年龄由大到小)排序
/
// 按工资升序排序(自然排序)
List

// 先按工资再按年龄升序排序
List

// 先按工资再按年龄自定义排序(降序)
List

String[] arr1 = {“a”, “b”, “c”, “d”};
String[] arr2 = {“d”, “e”, “f”, “g”};

Stream

// concat:合并两个流 distinct:去重
List

Original: https://www.cnblogs.com/ExMan/p/16386495.html
Author: ExplorerMan
Title: Java8新特性之Stream–collect方法

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/537799/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • xxl-job(分布式任务调度平台)学习笔记 2022-07-25

    原文地址:https://blog.csdn.net/weixin_43821679/article/details/109896696 1、传统定时任务 1.1 实现方法 1.1…

    Java 2023年6月5日
    094
  • Rocket MQ报错No route info of this topic的问题探究

    系统订单创建成功之后需要发送订单创建成功的消息,但是今天突然遇到了如下的报错 出现上面的错误,主要有三种情况 一:Topic不存在,即没有创建出来次Topic(我们项目均为手动创建…

    Java 2023年5月30日
    077
  • Collections.singletonList方法

    这个方法主要用于只有一个元素的优化, 减少内存分配,无需分配额外的内存,可以从SingletonList内部类看得出来,由于只有一个element,因此可以做到内存分配最小化,相比…

    Java 2023年6月13日
    077
  • 单链表插入删除完整版

    #include #include using namespace std; //c++中默认的格式,在iomanip 这个头文件中,io 表示输出,manip 是manipula…

    Java 2023年6月5日
    064
  • 微服务开发框架 SpringCloud

    今天给大家介绍一下微服务开发框架 SpringCloud。 概述 微服务架构是当前软件开发领域的技术热点。它在各种博客、社交媒体和会议演讲上的出镜率非常之高。大家以前可能或多或少听…

    Java 2023年5月30日
    097
  • SpringMvc异常处理

    异常处理器 编写异常处理器 @RestControllerAdvice //用于标识&amp…

    Java 2023年6月7日
    080
  • Java-SpringBoot整合SpringCloud

    SpringBoot整合SpringCloud 1. SpringCloud特点 SpringCloud专注于为典型的用例和扩展机制提供良好的开箱即用体验,以涵盖其他情况: 分布式…

    Java 2023年6月8日
    082
  • [spring]spring注解开发

    8.使用注解开发 1.bean spring4以后,注解依赖于aop包,确保你的lib中有它 确保开启了使用注解 2.组件代替bean实现自动注入 在配置文件中自动扫描包下的所有类…

    Java 2023年6月6日
    062
  • JAVA_AesCBC例子

    java;gutter:true; import javax.crypto.Cipher; import javax.crypto.spec.IvParameterSpec; im…

    Java 2023年5月29日
    072
  • InnoDB学习(一)之BufferPool

    我们知道InnoDB数据库的数据是持久化在磁盘上的,而磁盘的IO速度很慢,如果每次数据库访问都直接访问磁盘,显然严重影响数据库的性能。为了提升数据库的访问性能,InnoDB为数据库…

    Java 2023年6月8日
    075
  • jQuery

    什么是封装? 打包?安装?组合? 我们将一些功能组装在一起,生成一些简单好用的API。复杂的API就不用在看了。 比如:我们通过元素的ID获取页面的一个元素DOM对象 原生的API…

    Java 2023年6月7日
    081
  • 项目管理和缺陷跟踪系统 Redmine

    Redmine 概述 Redmine 是用 Ruby 开发的基于 web 的项目管理软件,是用 ROR 框架开发的一套跨平台项目管理系统,支持多种数据库,有不少自己独特的功能,例如…

    Java 2023年6月7日
    079
  • 如何解决error: failed to push some refs to ‘xxx(远程库)‘(图文解说简洁版)

    第一次在上传远程仓库的时候出现此问题: error: failed to push some refs to ‘https://gitee.com/zhang-bingqian/c…

    Java 2023年6月5日
    0125
  • 关于IDEA中Tomcat中文乱码的解决方案

    进入Tomcat/config文件夹下,打开编辑logging.properties 然后查看该文件内是否存在 java.util.logging.ConsoleHandler.e…

    Java 2023年6月8日
    085
  • JavaCV的摄像头实战之七:推流(带声音)

    借助JavaCV,完成本地摄像头和麦克风数据推送到媒体服务器的操作,并用VLC验证 欢迎访问我的GitHub 这里分类和汇总了欣宸的全部原创(含配套源码):https://gith…

    Java 2023年6月8日
    091
  • Java面试题(六)–Redis

    1 Redis基础篇 1、简单介绍一下Redis优点和缺点? 优点: 1、本质上是一个 Key-Value 类型的内存数据库,很像memcached 2、整个数据库统统加载在内存当…

    Java 2023年6月9日
    084
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球