场景:如果name重复,删掉重复的对象,只保留id,id塞到对象的某个属性中
期望结果:
1.将List<Map>分组
Map<String, List<Map<String, Object>>> mapByName = beforePojoList.stream().collect(Collectors.groupingBy(map -> String.valueOf(map.get("name"))));
2.遍历map。组装成list
遍历1W以下的ArrayList数据,for快一些。1~10W用for each流
List<Pojo> afterList = new ArrayList<>();
for ( List<Map<String, Object>> mapList : mapByName.values()){
Map<String, Object> map = mapList.get(0);
Pojo pojo = new Pojo(map.get("id").toString(),map.get("label").toString(),(Integer) map.get("level"));
if (mapList.size() > 1){
List<String> ids = mapList.stream().map(m -> String.valueOf(m.get("id"))).collect(Collectors.toList());
pojo.setIds(ids);
}
afterList.add(pojo);
}
补充:如果要这种效果
那么不用判断了,直接往里塞
List<Pojo> pjList = new ArrayList<>();
mapByName.forEach((k,v) ->{
Map<String, Object> map = v.get(0);
List<String> ids = v.stream().map(listingMap -> { return String.valueOf(listingMap.get("id")); }).collect(Collectors.toList());
Pojo pojo = new Pojo();
pojo.setName(map.get("label").toString());
pojo.setId(map.get("id").toString());
pojo.setIds(ids);
pjList.add(pojo);
});