1、问题
我现在拿到的数据是下图形式,那我现在需要以cubicleId为主键,重新组list
处理后的数据,这是我想要的数据
2、解决
Map newMap = grouping(listParams,"cubicleId");
private static Map<String, Object> grouping(List<Map> list, String key) {
// 使用TreeMap存放元素并排序
Map<String, Object> newMap = new TreeMap<>(new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
return o2.compareTo(o1);
}
});
list.stream().forEach(m -> {
List<Object> l = new ArrayList<>();
l.add(m);
newMap.replace(m.get(key).toString(), l);
if (m.containsKey(key)) {
if (newMap.containsKey(m.get("cubicleId").toString())){
l.add(m);
newMap.replace(m.get(key).toString(), l);
}else {
l.clear();
l.add(m);
newMap.put(m.get(key).toString(), l);
}
}});
return newMap;
}
3、补充
List<Map>根据Map的某个字段去重
listParams = listParams.stream().collect(Collectors.collectingAndThen(
Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(p -> p.get("cubicleId").toString()))),
ArrayList::new));