您当前的位置: 首页 >  慌途L

Stream流 | Collectors.toMap 根据收集自身对象(同时防止key重复)

慌途L 发布时间:2020-06-24 15:59:18 ,浏览量:4

Stream流 | Collectors.toMap 根据收集自身对象

日常开发中我们通常会想将 List 集合根据某个成员变量为 key 值将其转成 Map 集合,如下:

GroupInfoEntity.java

@Data
public class GroupInfoEntity{
	/** 组织架构ID */
	private Long id;
	/** 组织架构名称 */
	private String name;
	/** 组织架构父ID */
	private Long parentId;
}

有一个封装上面实体的 List 集合,现在有下面两个需求: 假设 list 里面存了一些数据

List list = new ArrayList();
  • 1.根据 idname 将其转成 Map 集合
Map map = list.stream()
.collect(Collectors.toMap(GroupInfoEntity::getId, GroupInfoEntity::getName));
  • 2.根据 id对象自己 转成 Map 集合
Map map = list.stream()
.collect(Collectors.toMap(GroupInfoEntity::getId, Function.identity()));
  • 3.防止key重复 一般toMap时只用到两个参数,第一个设定Key,第二个设定value。但如果Key重复的话,那就需要用到第三个参数,可以这么写(k1, k2)-> k1。 什么意思呢,就是说如果k1k2key都相同,那么只取k1的值去覆盖之前的值,也可以改为取k2的值,这样就解决了duplicate key的问题
Map map = list.stream()
.collect(Collectors.toMap(GroupInfoEntity::getId, GroupInfoEntity::getName, (k1, k2) -> k1));

这样就很完美的得到自己想要的数据。

注意:

这里的 Function.identity() 等价于 t -> t,就是将对象自己返回。

关注
打赏
1688896170
查看更多评论

慌途L

暂无认证

  • 4浏览

    0关注

    118博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文
立即登录/注册

微信扫码登录

0.0489s