map按value值降序排序

16uni 2021年04月29日 5,784次浏览

map按value值降序排序,并返回指定大小的map

    /**
     * 降序排序并返回指定长度
     * @param map 需要排序的map
     * @param count 新map大小
     * @return 新map
     */
    public static Map sort(Map map, Integer count){

        Map newMap = new HashMap();

        List<Map.Entry<Integer, Integer>> list = new ArrayList<>(map.entrySet());

        // 根据entryset中value的值,对ArrayList中的entryset进行排序
        Collections.sort(list, (o1, o2) -> {
            // 降序排序
            return o2.getValue().compareTo(o1.getValue());
        });

        if(list.size()>count){

            list = list.subList(0,count);
        }
        //用迭代器对list中的元素遍历
        Iterator<Map.Entry<Integer, Integer>> iterator = list.iterator();

        while (iterator.hasNext()) {

            Map.Entry<Integer, Integer> entry = iterator.next();

            Integer key = entry.getKey();

            Integer value = entry.getValue();

            newMap.put(key,value);
        }
        return newMap;
    }