stream流转toMap的使用以及Key重复的解决

1.如何将一个List转为map,并指定map的key和value?

  • 首先通过.stream()将List转为流,然后通过终止操作方法collect将流转化为其他形式,接收一个Collector接口的实现,用于给Stream中元素做汇总的方法;通过toMap把流中的元素收集到Map中。toMap中有两个参数,第一个用来设定Key,第二个用来设定value。
  • 这里就是调用OperationUnitVO这个对象里面的getOuCode方法,来获取到ouCode值设为Key;设置value同理
List<OperationUnitVO> dbOus = commonRepository.selectOuByCodes(userDetails.getTenantId(), ouCodes);
Map<String, Long> ouIdAndOuCodeMap = dbOus.stream().collect(Collectors.toMap(OperationUnitVO::getOuCode, OperationUnitVO::getOuId));

2.toMap时设定的key有重复怎么办?

  • 一般toMap时只用到两个参数,第一个设定Key,第二个设定value。但如果Key重复的话,那就需要用到第三个参数,可以这么写(v1, v2)-> v1。什么意思呢,就是说如果v1和v2的key都相同,那么只取v1的值去覆盖之前的值,也可以改为取v2的值,这样就解决了duplicate key的问题
List<ItemVO> itemVos = commonRepository.selectItemByOuCodes(userDetails.getTenantId(), ouCodes);
 Map<String, Long> itemNumAndItemIdMap = itemVos.stream().collect(Collectors.toMap(ItemVO::getItemNumber, ItemVO::getItemId, (v1, v2) -> v1));
  • 11
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值