Cod*_*lus 25 java treemap comparator sortedmap
我需要一个TreeMap的比较器.我应该在我的TreeMap的构造函数中匿名写这个吗?我怎么能写我的比较器.目前,Java不喜欢我的代码(我可以匿名执行此操作吗?):
SortedMap<String, Double> myMap =
new TreeMap<String, Double>(new Comparator<Entry<String, Double>>()
{
public int compare(Entry<String, Double> o1, Entry<String, Double> o2)
{
return o1.getValue().compareTo(o2.getValue());
}
});
Run Code Online (Sandbox Code Playgroud)
Ami*_*nde 55
您无法在值上对TreeMap进行排序.
基于红黑树的NavigableMap实现.地图根据其键的自然顺序进行排序,或者通过地图创建时提供的比较器进行排序,具体取决于您需要提供的构造函数
comparator,Comparator<? super K>以便比较器在键上进行比较.
要对值进行排序,您需要使用SortedSet.使用
SortedSet<Map.Entry<String, Double>> sortedset = new TreeSet<Map.Entry<String, Double>>(
new Comparator<Map.Entry<String, Double>>() {
@Override
public int compare(Map.Entry<String, Double> e1,
Map.Entry<String, Double> e2) {
return e1.getValue().compareTo(e2.getValue());
}
});
sortedset.addAll(myMap.entrySet());
Run Code Online (Sandbox Code Playgroud)
举个例子
SortedMap<String, Double> myMap = new TreeMap<String, Double>();
myMap.put("a", 10.0);
myMap.put("b", 9.0);
myMap.put("c", 11.0);
myMap.put("d", 2.0);
sortedset.addAll(myMap.entrySet());
System.out.println(sortedset);
Run Code Online (Sandbox Code Playgroud)
输出:
[d=2.0, b=9.0, a=10.0, c=11.0]
Run Code Online (Sandbox Code Playgroud)
Bhe*_*ung 13
比较器应仅用于键,而不是整个条目.它根据键对条目进行排序.
您应该将其更改为以下内容
SortedMap<String, Double> myMap =
new TreeMap<String, Double>(new Comparator<String>()
{
public int compare(String o1, String o2)
{
return o1.compareTo(o2);
}
});
Run Code Online (Sandbox Code Playgroud)
更新
您可以执行以下操作(在地图中创建条目列表并根据值对列表进行排序,但请注意,这不会对地图本身进行排序) -
List<Map.Entry<String, Double>> entryList = new ArrayList<Map.Entry<String, Double>>(myMap.entrySet());
Collections.sort(entryList, new Comparator<Map.Entry<String, Double>>() {
@Override
public int compare(Entry<String, Double> o1, Entry<String, Double> o2) {
return o1.getValue().compareTo(o2.getValue());
}
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
100798 次 |
| 最近记录: |