简要说明

开发过程中 经常会遇到 list转Map的操作,so 来了解下怎么转吧

案例参考

单个对象

1、单个对象-下级篇:
1、不兼容重复key的场景

  1. Map<Long, MaterialInfoSearchBO> materialSearchBoMap = materialSearchBoList.stream().collect(Collectors.toMap(MaterialInfoSearchBO::getMaterialOrgId, c -> c);

2、单个对象-中级篇:
1、不兼容重复key的场景

  1. Map<Long, MaterialInfoSearchBO> materialSearchBoMap = materialSearchBoList.stream().collect(Collectors.toMap(MaterialInfoSearchBO::getMaterialOrgId, Function.identity());

3、单个对象-高级篇:
1、使用了Function静态方法identity()来代替Lambda表达式输出
2、兼容重复key的场景

  1. Map<Long, MaterialInfoSearchBO> materialSearchBoMap = materialSearchBoList.stream().collect(Collectors.toMap(MaterialInfoSearchBO::getMaterialOrgId, Function.identity(), (x1, x2) -> x1));

4、单个对象-终极篇:
1、使用了安全的Map对象
2、使用了Function静态方法identity()来代替Lambda表达式输出
3、兼容重复key的场景

  1. ConcurrentHashMap<Long, MaterialInfoSearchBO> materialSearchBoMap = materialSearchBoList.stream().collect(Collectors.toMap(MaterialInfoSearchBO::getMaterialOrgId, Function.identity(), (x1, x2) -> x1, ConcurrentHashMap::new));

List对象

1、list对象

  1. Map<Long, List<MaterialInfoSearchBO>> materialSearchBoListMap = materialSearchBoList.stream().collect(Collectors.groupingBy(MaterialInfoSearchBO::getBrandId));

多重map结构

1、两个简单的Map结构

  1. Map<Long, Map<Long, MaterialInfoSearchBO>> twoMap = materialSearchBoList.stream().collect(Collectors.toMap(MaterialInfoSearchBO::getBrandId, p -> {
  2. Map<Long, MaterialInfoSearchBO> map = new HashMap<>();
  3. map.put(p.getMaterialOrgId(), p);
  4. return map;
  5. }));