我一直在尝试按 values
的降序对 map 进行排序但我现有的代码按 keys
降序排序。如何按值的降序排序?
我的代码:
System.out.println("Unsorted Map:" +merger);
Map<Integer, Double> Sortedmerger = SortByValue(merger);
System.out.println("Sorted Map: "+ Sortedmerger);
public static TreeMap<Integer, Double> SortByValue (Map<Integer, Double> map) {
ValueComparator vc = new ValueComparator(map);
TreeMap<Integer, Double> sortedMap = new TreeMap<Integer, Double>(Collections.reverseOrder());
sortedMap.putAll(map);
return sortedMap;
}
class ValueComparator implements Comparator<Double> {
Map<Integer, Double> map;
public ValueComparator(Map<Integer, Double> base) {
this.map = base;
}
public int compare(Double a, Double b) {
if (map.get(a) >= map.get(b)) {
return -1;
} else {
return 1;
} // returning 0 would merge keys
}
}
我的输出:
Unsorted Map:{1=0.53, 2=0.48, 23=0.54, 10=0.47}
Sorted Map: {23=0.54, 10=0.47, 2=0.48, 1=0.53}
最佳答案
您的 map 键类型是整数,因此您必须使用 Comparator<Integer>
和你的compare
方法应该采用整数输入,通过该 Integer 键,您可以通过 map.get(a)
获得 Double 值和map.get(b)
。并在 TreeMap
您必须定义您创建的比较器类的构造函数。(即 ValueComparator)
引用这段代码:
public static TreeMap<Integer, Double> SortByValue(Map<Integer, Double> map) {
ValueComparator vc = new ValueComparator(map);
TreeMap<Integer, Double> sortedMap = new TreeMap<Integer, Double>(vc);\\constructor should be vc which extends Comparator
sortedMap.putAll(map);
return sortedMap;
}
class ValueComparator implements Comparator<Integer> {
Map<Integer, Double> map;
public ValueComparator(Map<Integer, Double> base) {
this.map = base;
}
@Override
public int compare(Integer a, Integer b) {
// TODO Auto-generated method stub
if (map.get(a) >= map.get(b)) {
return -1;
} else {
return 1;
}
}
}
关于java - 按值的降序对 Map 进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29739000/