• Map根据value值进行分组


        今天碰到同事在群里问怎么把一个Map根据value进行分组,当时我的第一想法是将value和key互换,
    多个value对应的不同key作为集合,代码如下:
    1
    2
    Map<String,Integer>SataMap=new HashMap<>();
            final Map<Integer, List<String>> groupMap = new HashMap<>();
            SataMap.put("A",1);
            SataMap.put("b",3);
            SataMap.put("c",2);
            SataMap.put("D",4);
            SataMap.put("e",2);
            SataMap.put("f",4);
            SataMap.put("G",3);
            SataMap.put("h",2);
            System.out.println(result);
            SataMap.forEach(new BiConsumer<String, Integer>() {
                @Override
                public void accept(String key, Integer value) {
                    if(groupMap.containsKey(value)){
                        groupMap.get(value).add(key);
                    }else{
                        List<String> values = new ArrayList<>();
                        values.add(key);
                        groupMap.put(value, values);
                    }
                }
            });


    结果很快被打脸了,同事找到一个更好的方法

    Map<Integer, List<Map.Entry<String,Integer>>>result= SataMap.entrySet().stream().collect(Collectors.groupingBy(c -> c.getValue()));
    1
    将Map转换为一个entry集合,然后再用集合分组的方式,就很简单的实现这个功能了

  • 相关阅读:
    11
    消除左递归
    4.K均值算法--应用
    3.K均值算法
    2.机器学习相关数学基础作业
    机器算法学习第一次作业
    第十五次作业
    第十四次作业
    第十三次作业
    第十二次作业
  • 原文地址:https://www.cnblogs.com/zhuyeshen/p/12530060.html
Copyright © 2020-2023  润新知