Java中对Map按key进行排序是非常简单的,使用TreeMap即可轻松地解决这个问题。但是有的时候我们想对Map按value进行排序。这种情况下排序就比较麻烦了。我们还是可以利用TreeMap进行,但这种情况下,作为参数传入TreeMap构造器的comparator需要具有按value比较大小的能力。具体代码实现如下:
- 方法一:
public class SortMapByValue {
public static Map<K, V> sortMap(Map<K, V> unsortedMap) {
Comparator<K> comparator = new ValueComparator<K, V>(unsortedMap);
TreeMap<K, V> result = new TreeMap<K, V>(comparator);
result.putAll(unsortedMap);
return result;
}
}
class ValueComparator<K, V extends Comparable<V>> implements Comparator<K> {
HashMap<K, V> map = new HashMap<K, V>();
public ValueComarartor(HashMap<K, V> map) {
this.map.putAll(map);
}
@Override
public int compare(K s1, K s2) {
return map.get(s1).compareTo(map.get(s2));
}
}
- 方法二:
public class SortMapByValue {
public static <K, V extends Comparable<? super V>> Map<K, V> sortByValue(Map<K, V> map) {
List<Map.Entry<K, V>> list = new LinkedList<>(map.entrySet());
Collisions.sort(list, new Comparator<Map.Entry<K, V>>() {
@Override
public int compare(Map.Entry<K, V> e1, Map.Entry<K, V> e2) {
return (e1.getValue()).compareTo(e2.getValue());
}
});
Map<K, V> result = new LinkedHashMap<>();
for (Map.Entry<K, V> entry : list) {
result.put(entry.getKey(), entry.getValue());
}
return result;
}
}
本文介绍两种在Java中根据Map的值进行排序的方法。第一种方法通过自定义Comparator并使用TreeMap来实现。第二种方法则是利用Collections.sort()方法配合匿名内部类进行排序。
3180

被折叠的 条评论
为什么被折叠?



