List数据转Map数据并进行分组排序

  利用JAVA 8的特性实现List数据转Map数据并进行分组排序。

1、准备数据

        List<Map<String, Object>> list = new ArrayList<>();
        Map<String, Object> m1 = new HashMap<>();
        m1.put("a", 1);
        m1.put("c", 3);
        Map<String, Object> m2 = new HashMap<>();
        m2.put("a", 11);
        m2.put("b", 2);
        Map<String, Object> m3 = new HashMap<>();
        m3.put("a", 111);
        m3.put("c", 1);
        Map<String, Object> m4 = new HashMap<>();
        m4.put("b", 22);
        Map<String, Object> m5 = new HashMap<>();
        m5.put("a", 1111);
        m5.put("b", 222);
        list.add(m1);
        list.add(m2);
        list.add(m3);
        list.add(m4);
        list.add(m5);
        System.out.println("未分组排序数据:" + list);
        System.out.println("已分组排序数据:" + transition(list));

2、编写分组排序方法

    public static Map<String, List<Map<String, Object>>> transition(List<Map<String, Object>> list){
        Map<String, List<Map<String, Object>>> map = new HashMap<>();
        // 分组
        for(Map<String, Object> temp : list) {
            // 获取Map的每一对值
            Iterator<Map.Entry<String, Object>> iterator = temp.entrySet().iterator();
            while (iterator.hasNext()) {
                List<Map<String, Object>> listAndMap = new ArrayList<>();
                // 获取到每一个实体
                Map.Entry<String, Object> entity = iterator.next();
                if (map.containsKey(entity.getKey())) {
                    // 获取原来存在的数据
                    List<Map<String, Object>> lm = map.get(entity.getKey());
                    lm.add(new HashMap<String, Object>() {{
                        put(entity.getKey(), entity.getValue());
                    }});
                    Collections.sort(lm, (param1, param2) ->
                            (param2.get(entity.getKey()).toString().compareTo(param1.get(entity.getKey()).toString()))
                    );
                    map.replace(entity.getKey(), lm);
                } else {
                    listAndMap.add(new HashMap<String, Object>() {{
                        put(entity.getKey(), entity.getValue());
                    }});
                    map.put(entity.getKey(), listAndMap);
                }
            }
        }
        return map;
    }

3、测试

        System.out.println("未分组排序数据:" + list);
        System.out.println("已分组排序数据:" + transition(list));

4、输出结果

未排序数据:[{a=1, c=3}, {a=11, b=2}, {a=111, c=1}, {b=22}, {a=1111, b=222}]
已排序数据:{a=[{a=1111}, {a=111}, {a=11}, {a=1}], b=[{b=222}, {b=22}, {b=2}], c=[{c=3}, {c=1}]}

* 本人小白,希望可以帮助到跟我一样的小白,希望大神多多指导。

posted @ 2018-09-14 10:52  会飞的小冉  阅读(4233)  评论(0编辑  收藏  举报