当我需要根据值对 Map 进行排序时,我经常会遇到这种情况。地图在 JDK 中并不适用,我决定不使用 Guava(似乎这个东西是一个班轮,但我不太明白)也不是 Apache Commons,所以我这样做了。顺便说一句,这是一个非常受欢迎的问题,但大多数答案在某种程度上都是错误的。
Map<String, Long> map = new HashMap<String, Long>();
// populate
List<Map.Entry<String, Long>> list = new LinkedList<Map.Entry<String,Long>>();
for (Map.Entry<String, Long> entry : map.entrySet()) {
list.add(entry);
}
Collections.sort(list, new MapComparable());
LinkedHashMap<String, Long> linkedMap = new LinkedHashMap<String, Long>();
for (Map.Entry<String, Long> entry : list) {
linkedMap.put(entry.getKey(), entry.getValue());
}
}
public static class MapComparable implements Comparator<Map.Entry<String, Long>>{
public int compare(Entry<String, Long> e1, Entry<String, Long> e2) {
return (e1.getValue()<e2.getValue() ? -1 : (e1.getValue()==e2.getValue() ? 0 : 1));
}
}
我的问题是,有没有更好的方法将 EntrySet 与 Collection 联系起来?看起来不太好。
这可靠吗?