list中有个多个map,根据map中的id分类。【小学生行为记录】
需求是:一个list中存多个map,每个map有id和对应的属性,要根据id把不同map中的属性归类。
数据:[{id=4, 身高=150}, {id=4, 性别=男}, {爱好=打篮球, id=4}, {id=8, 身高=350}, {id=8, 性别=女}, {爱好=打羽毛球, id=8}]
现在list里有6个map,2种id,把id为4的分一组,把id为8的分一组。
偶然看到一个这种题,当时贴里写的多层嵌套循环解决。无奈智商不够,没有看懂,用自己的弱智技术实现了分组,记录自己的小学生行为,多年以后再来看以前的自己。
我实现的结果是:
id为4的:{爱好=打篮球, id=4, 身高=150, 性别=男}
id为8的:{爱好=打羽毛球, id=8, 身高=350, 性别=女}
贴上我的弱智代码,如果有大佬能指点一下更好的实现方式和思路,感激不尽。
List<Map<String, Object>> list = new ArrayList<>();
Map<String, Object> map1 = new HashMap<>();
map1.put("id", "4");
map1.put("身高", "150");
Map<String, Object> map2 = new HashMap<>();
map2.put("id", "4");
map2.put("性别", "男");
Map<String, Object> map3 = new HashMap<>();
map3.put("id", "4");
map3.put("爱好", "打篮球");
Map<String, Object> map4 = new HashMap<>();
map4.put("id", "8");
map4.put("身高", "350");
Map<String, Object> map5 = new HashMap<>();
map5.put("id", "8");
map5.put("性别", "女");
Map<String, Object> map6 = new HashMap<>();
map6.put("id", "8");
map6.put("爱好", "打羽毛球");
list.add(map1);
list.add(map2);
list.add(map3);
list.add(map4);
list.add(map5);
list.add(map6);
//打印数据
System.out.println(list); //[{id=4, 身高=150}, {id=4, 性别=男}, {爱好=打篮球, id=4}, {id=8, 身高=350}, {id=8, 性别=女}, {爱好=打羽毛球, id=8}]
//获取分组的ID,保存到SET
HashSet<Object> idsSet = new HashSet<>();
for (int i = 0; i < list.size(); i++) {
Map<String, Object> map7 = list.get(i);
idsSet.add(map7.get("id"));
}
//SET转数组
Object[] idsArray = idsSet.toArray();
//遍历list中的map,并根据id分组
HashMap<String, Object> map8 = new HashMap<>();
HashMap<String, Object> map9 = new HashMap<>();
for (Map<String, Object> map : list) {
map.forEach((k, v) -> {
if (k.equals("id") && v.equals(idsArray[0])) {
map8.putAll(map);
} else if (k.equals("id") && v.equals(idsArray[1])) {
map9.putAll(map);
}
});
}
System.out.println("id为" + idsArray[0] + "的:" + map8); //id为4的:{爱好=打篮球, id=4, 身高=150, 性别=男}
System.out.println("id为" + idsArray[1] + "的:" + map9); //id为8的:{爱好=打羽毛球, id=8, 身高=350, 性别=女}