随记之对Map的Value字段进行排序

构造TreeMap可以指定Comparator,但是不能对value字段进行排序。如果有需求对Value字段排序,例如map存放的是单词,单词出现次数,怎么按单词次数排序呢?

可以先将map中的key-value放入list,然后用Collections.sort对list排序,再将排序后的list放入LinkedHashMap,最后返回LinkedHashMap就可以了。LinkedHashMap可是个宝贝,可以通过构造方法制定是按放入的顺序,还是get顺序 排序。LinkedHashMap,稍微修改,可以很容易的实现LRU算法(最近最少使用)。具体的TreeMap 红黑树实现和LinkedHashMap实现还仔细看。
(虽然我也不是很理解,还是先存一下)
JDK1.7版本

public static > Map sortByValue(Map map) {
        List> list = new LinkedList<>(map.entrySet());
        Collections.sort(list, new Comparator>() {
            @Override
            public int compare(Map.Entry o1, Map.Entry o2) {
                return (o1.getValue()).compareTo(o2.getValue());
            }
        });

        Map result = new LinkedHashMap<>();
        for (Map.Entry entry : list) {
            result.put(entry.getKey(), entry.getValue());
        }
        return result;
    }

JDK1.8版本

public static > Map sortByValue(Map map) {
        Map result = new LinkedHashMap<>();
        Stream> st = map.entrySet().stream();

        st.sorted(Comparator.comparing(e -> e.getValue())).forEach(e -> result.put(e.getKey(), e.getValue()));

        return result;
    }

你可能感兴趣的:(随记之对Map的Value字段进行排序)