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, 性别=女}

 

posted @ 2022-02-08 16:05  毛伢子  阅读(338)  评论(0编辑  收藏  举报