Java 对Map进行排序,并取出前几个值

1、创建一个测试用的Map

        Map<String, Integer> map = new HashMap<>();
        map.put("张三",15);
        map.put("李四",13);
        map.put("王二麻",99);
        map.put("甲一",28);
        map.put("丙二",9);
        System.out.println(sortMap(map));

2、降序排序

    /**
     * description Map的value值降序排序
     *
     * @param map
     * @return java.util.Map
     * @version 1.0
     * @date 2020/12/12 17:48
     */
    public Map sortMap(Map<String, Integer> map) {

        //获取entrySet
        Set<Map.Entry<String, Integer>> mapEntries = map.entrySet();

        //使用链表来对集合进行排序,使用LinkedList,利于插入元素
        List<Map.Entry<String, Integer>> result = new LinkedList<>(mapEntries);
        //自定义比较器来比较链表中的元素
        Collections.sort(result, new Comparator<Map.Entry<String, Integer>>() {
            //基于entry的值(Entry.getValue()),来排序链表
            @Override
            public int compare(Map.Entry<String, Integer> o1, Map.Entry<String, Integer> o2) {
                return o2.getValue().compareTo(o1.getValue());
            }
        });

        //将排好序的存入到LinkedHashMap(可保持顺序)中,需要存储键和值信息对到新的映射中。
        Integer sort = 1;
        Map<String, Integer> linkMap = new LinkedHashMap<>();
        for (Map.Entry<String, Integer> newEntry : result) {
            // 取出排名前5的值
            if (sort <= 5) {
                linkMap.put(newEntry.getKey(), newEntry.getValue());
                ++sort;
            }
        }
        return linkMap;
    }

打印结果:

{王二麻=99, 甲一=28, 张三=15, 李四=13, 丙二=9}

3、正序排序,将sortMap()方法里面的o1和o2的顺序调换

public int compare(Map.Entry<String, Integer> o1, Map.Entry<String, Integer> o2) {
		return o1.getValue().compareTo(o2.getValue());
}

打印结果:

{丙二=9, 李四=13, 张三=15, 甲一=28, 王二麻=99}

你可能感兴趣的:(Java,java)