简要说明
开发过程中 经常会遇到 list转Map的操作,so 来了解下怎么转吧
案例参考
单个对象
1、单个对象-下级篇:
1、不兼容重复key的场景
Map<Long, MaterialInfoSearchBO> materialSearchBoMap = materialSearchBoList.stream().collect(Collectors.toMap(MaterialInfoSearchBO::getMaterialOrgId, c -> c);
2、单个对象-中级篇:
1、不兼容重复key的场景
Map<Long, MaterialInfoSearchBO> materialSearchBoMap = materialSearchBoList.stream().collect(Collectors.toMap(MaterialInfoSearchBO::getMaterialOrgId, Function.identity());
3、单个对象-高级篇:
1、使用了Function静态方法identity()来代替Lambda表达式输出
2、兼容重复key的场景
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的场景
ConcurrentHashMap<Long, MaterialInfoSearchBO> materialSearchBoMap = materialSearchBoList.stream().collect(Collectors.toMap(MaterialInfoSearchBO::getMaterialOrgId, Function.identity(), (x1, x2) -> x1, ConcurrentHashMap::new));
List对象
1、list对象
Map<Long, List<MaterialInfoSearchBO>> materialSearchBoListMap = materialSearchBoList.stream().collect(Collectors.groupingBy(MaterialInfoSearchBO::getBrandId));
多重map结构
1、两个简单的Map结构
Map<Long, Map<Long, MaterialInfoSearchBO>> twoMap = materialSearchBoList.stream().collect(Collectors.toMap(MaterialInfoSearchBO::getBrandId, p -> {
Map<Long, MaterialInfoSearchBO> map = new HashMap<>();
map.put(p.getMaterialOrgId(), p);
return map;
}));