JDK8有很多新特性,比如lambda表达式,函数式编程以及stream流的使用,这几个新特性,使用过之后就爱不释手了,比如将list集合通过stream可以直接转换成map对象。

语法:

Map map = list.stream.stream().collect(Collectors.toMap(list集合中对象::get属性,list对象别名->list对象别名));

示例:

Map<Integer , EmployeeTeacherCertificate> employeeTeacherCertificateMap =employeeTeacherCertificates.stream().collect(Collectors.toMap(EmployeeTeacherCertificate::getEmployeeId,cert->cert));

说明:

employeeTeacherCertificates List集合对象

EmployeeTeacherCertificate:是List中的集合对象

是不是很简单。

但是,如果list中比如说empId有重复的话,就会报错。如下:

错误信息说,employeeId=4429的值在集合中有重复的。

这个时候怎么解决呢?

我们可以使用toMap的另一个重载方法。带有去重的方法。

语法:

Collectors.toMap(keyMapper, valueMapper, mergeFunction)

源码:

参数说明:

前两个参数都是与之前一样 key 和 value得取值属性, 第三个参数是当key 发生重复时处理的方法,注释上的解释如下:

简单一句话:

一种合并函数,用于解决两者之间的冲突与提供的相同键相关联的值到{@link Map#merge(Object, Object, BiFunction)}。

该合并函数有两个参数,第一个参数为当前重复key 之前对应的值,第二个为当前重复key 现在数据的值。

1、重复时采用后面的value 覆盖前面的value

也可以简写成这样:

Map<String, String> map = list.stream().collect(

Collectors.toMap(Student :: getClassName, Student :: getStudentName,

(key1 , key2)-> key2 ));

也可以简写成这样:

Map<String, String> map = list.stream().collect(

Collectors.toMap(Student :: getClassName, Student :: getStudentName,

(value1, value2 )->{

return value2;

}));

凯哥这里就使用了第二种方案:

第二种简单也方便看懂。

最后来个总结吧。

总结:

这几个办法都是基于toMap重载方法第三个参数来实现的!至于哪个方法最好,我觉得应该取决于具体业务!

欢迎大家一起学习一起交流。凯哥Java

最新文章

  1. C# 超时类
  2. xshell linux传文件
  3. 利用iOS API编写简单微博客户端全过程
  4. JSONP(处理跨域问题)
  5. QT学习(对话框)codeblock版本
  6. Oracle数据库索引使用及索引失效总结
  7. Clob类型转换成String类型
  8. Git 的是使用入门
  9. ConcurrentHashMap源码分析
  10. 国内可用的Internet时间同步服务器地址(NTP时间服务器)
  11. struts2 s2-032漏洞分析
  12. 网易cetus数据库中间件安装-读写分离版本
  13. 【读书笔记】iOS-设计模式
  14. The last packet successfully received from the server was 20,519 milliseconds ago. The last packet sent successfully to the server was 0 milliseconds ago.
  15. 第三方统计分析埋点工具对比,神策、Ptmind、GrowingIO、国双,还有谷歌分析,谁更好?
  16. JAVA 传递
  17. 堆内存泄漏移除导致tcp链接异常高
  18. BZOJ 1009: [HNOI2008]GT考试(kmp+dp+矩阵优化)
  19. Linux--多网卡的7种Bond模式和交换机配置
  20. ubuntu安装zeromq

热门文章

  1. QF中间件
  2. 带你探索关于飞机Wi-Fi服务的神奇科学
  3. 201809-1 卖菜 Java
  4. day23(023-递归练习)
  5. 关于构造函数中的this()和super()
  6. 19 01 15 django 数据库设计模型 管理站点 注意:在引入外键在django 2以上改版
  7. dd if= of= MBR
  8. HDU_2256 矩阵快速幂 需推算
  9. RaspBerry--解决无法用 ssh 直接以 root 用户登录
  10. Linux-线程常见函数