【发布时间】:2012-07-23 18:37:22
【问题描述】:
我正在使用映射接口从文件中读取数据,然后将其中的值存储为键值对。文件格式如下
A 34
B 25
c 50
我将从该文件中读取数据并将其存储为键值对,然后将其显示给用户。我的要求是以这种格式显示结果
C 50
A 34
B 25
因此我需要按值的降序对地图进行排序。这样我就可以将这些显示为我的结果..我已经阅读了这个并找到了下面的代码
static <K,V extends Comparable<? super V>> SortedSet<Map.Entry<K,V>> entriesSortedByValues(Map<K,V> map) {
SortedSet<Map.Entry<K,V>> sortedEntries = new TreeSet<Map.Entry<K,V>>(
new Comparator<Map.Entry<K,V>>() {
@Override public int compare(Map.Entry<K,V> e1, Map.Entry<K,V> e2) {
int res = e1.getValue().compareTo(e2.getValue());
return res != 0 ? res : 1; // Special fix to preserve items with equal values
}
}
);
sortedEntries.addAll(map.entrySet());
return sortedEntries;
}
我希望这是按升序对值进行排序,我只是想知道这种方法是否正确或其他一些有效的方法对我有帮助吗?
【问题讨论】:
-
也许你应该看看 Guava。见this评论。
-
@NandaKumar:
Sets 不允许重复,例如使用List。如果你开始允许他们,你就违反了Comparator的合同! -
`map.entrySet().stream().sorted(Comparator.comparing(e->-e.getValue())).forEach(System.out::println);`跨度>