我想写一个比较器,让我按值而不是默认的自然顺序对TreeMap进行排序.
我试过这样的东西,却找不到出了什么问题:
import java.util.*;
class treeMap {
public static void main(String[] args) {
System.out.println("the main");
byValue cmp = new byValue();
Map<String, Integer> map = new TreeMap<String, Integer>(cmp);
map.put("de",10);
map.put("ab", 20);
map.put("a",5);
for (Map.Entry<String,Integer> pair: map.entrySet()) {
System.out.println(pair.getKey()+":"+pair.getValue());
}
}
}
class byValue implements Comparator<Map.Entry<String,Integer>> {
public int compare(Map.Entry<String,Integer> e1, Map.Entry<String,Integer> e2) {
if (e1.getValue() < e2.getValue()){
return 1;
} else if (e1.getValue() == e2.getValue()) {
return 0;
} else {
return -1;
}
}
}
Run Code Online (Sandbox Code Playgroud)
我想我要问的是:我可以Map.Entry传递给比较器吗?
我有一张地图:TreeMap<String, Integer> m = new TreeMap<>();我有一个完整的字母和值,显示我的文字中每个字母的次数.
我想按递减计数顺序对该地图进行排序; 也就是说,最常见的字母在第一行,最后一行表示最不频繁的字母.如果两个字母具有相同的频率,那么字母表中首先出现的字母必须首先出现.怎么做?
我试过Comparator:
public int compare(String a, String b) {
if (base.get(a) >= base.get(b) && a.compareToIgnoreCase(b) < 0) {
return -1;
} else {
return 1;
}
}
Run Code Online (Sandbox Code Playgroud)
但仍然,不是它,输出是:
D 3
E 3
A 2
S 5
Run Code Online (Sandbox Code Playgroud)
伙计们......之前发现这个,这根本没有帮助.好的输出应该是:
S 5
D 3
E 3
A 2
Run Code Online (Sandbox Code Playgroud) 我在java中使用treeMap.我想获得所有值的排序列表/集合.TreeMap.values()可以解决这个问题吗?
我得到的集合,它将基于keySet进行排序,或者此集合是随机的.
谢谢.