Java8 list to Map (key 重复 value合并到Collection)

[想要保证顺序](https://blog.csdn.net/qq_43599835/article/details/90339813):

方案:
        Map<String, List<GeneralVO>> groupMap2 =
                generalVOS.stream().collect(Collectors.groupingBy(GeneralVO::getTaskId,LinkedHashMap::new,Collectors.toList()));

多层次分组:(应该有更好的方法呢todo)
        LinkedHashMap<String, List<GeneralVO>> groupMapByStage =
                generalVOS.stream().collect(Collectors.groupingBy(GeneralVO::getStageId,LinkedHashMap::new,Collectors.toList()));

        LinkedHashMap<String, LinkedHashMap<String, List<GeneralVO>>> groupMapGroupByStageAndTask =new LinkedHashMap<>();
        groupMapByStage.forEach((k, v) ->
                groupMapGroupByStageAndTask.put(k
                        , v.stream().collect(Collectors.groupingBy(GeneralVO::getTaskId, LinkedHashMap::new, Collectors.toList()))));

        System.out.println(JSON.toJSONString(groupMapGroupByStageAndTask));




如下方

案的不能保证顺序:
方案零:
        Map<String, List<GeneralVO>> groupMap =
                generalVOS.stream().collect(Collectors.groupingBy(GeneralVO::getTaskId)); //默认hashMap无序

方案一:
Collectors.toMap:

List<String> list = Lists.newArrayList("1", "2", "3", "1");  
  Map<String, List<String>> map = list.stream().collect(Collectors.toMap(key -> key,  
          value -> Lists.newArrayList(value),  
          (List<String> newValueList, List<String> oldValueList) -> {  
              oldValueList.addAll(newValueList);  
              return oldValueList;  
          }));  
  System.out.println(JSON.toJSONString(map));:
  Map<String,List<Parts>> partsMap = partList.stream().collect(Collectors.toMap(Parts::getMaintainCode, part ->
  Lists.newArrayList(part),(List<Parts> newValueList,List<Parts> oldValueList)->
       {oldValueList.addAll(newValueList);
          return oldValueList;
        }));

更多: [Java8 中 List 转 Map(Collectors.toMap) 使用技巧](https://zhangzw.com/posts/20191205.html)

更多  [ibm stream](https://www.ibm.com/developerworks/cn/java/j-lo-java8streamapi/)
 
方案二:
map.merge实现list to map //todo
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值