我想要做的是按值对映射进行排序。我浏览了stackoverflow网站上的许多问题,找到了下面的解决方案,它们做到了我想要的,但遗漏了一个小东西。
Link1:排序映射
但我遇到的问题是,默认情况下,这是按值的升序排序的。我想按降序进行排序:
所以我创建了一个实现比较器的类
class MyComparator implements Comparator {
Map map;
public MyComparator(Map map) {
this.map = map;
}
public int compare(Object o1, Object o2) {
return ((Integer) map.get(o2)).compareTo((Integer) map.get(o1));
}
}
然后我把我的地图传给树状地图
MyComparator comp = new MyComparator(myMap);
Map<String, Integer> newMap = new TreeMap(comp);
newMap.putAll(myMap);
这似乎是一种糟糕的方法,因为我觉得这是低效的。有没有办法更改链接中的解决方案,以在默认情况下按降序排序。
发布于 2013-09-21 02:17:35
您应该使用new TreeMap<>(Collections.reverseOrder());
。
Map<String, Integer> newMap = new TreeMap<>(Collections.reverseOrder());
newMap.putAll(myMap);
或者反转现有的比较器,如值比较器Collections.reverseOrder(comparator)
。它的工作原理类似于您在调用compare
/compareTo
之前交换两个对象的方法。
发布于 2014-10-04 20:16:01
TreeMap<Long,String> treeMap = new TreeMap<Long,String>();
NavigableMap <Long, String> nmap = treeMap.descendingMap();
Set<Long, String> set = nmap.entrySet();
Iterator<Long, String> iterator = set.iterator();
现在您可以遍历迭代器并使用iterator.hasNext()和iterator.next()方法提取值......
发布于 2017-05-27 01:20:41
这将会起作用:
TreeMap<Integer, Integer> reverseInteger=new TreeMap<>(new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
return o2>o1?1:o2==o1?0:-1;
}
});
https://stackoverflow.com/questions/18923167
复制相似问题