zoukankan      html  css  js  c++  java
  • 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集合,然后再用集合分组的方式,就很简单的实现这个功能了

  • 相关阅读:
    iOS开发---iPhone SDK 包含哪些东西?
    COS-8文件系统
    COS-7设备管理
    COS-6主存管理
    COS-5资源分配与调度
    COS-4进程及进程管理
    饭卡管理系统学生E-R图
    COS-3OS的用户接口
    COS-2OS结构和硬件支持
    计算机操作系统-1绪论
  • 原文地址:https://www.cnblogs.com/zhuyeshen/p/12530060.html
Copyright © 2011-2022 走看看