可能是重复问题:
如何在Java中按值对Map键值对进行排序?
我正在使用map接口从文件中读取并将其存储为键值对。文件格式如下:
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;
}
我希望这将按升序排序值,我只想知道这种方法是否正确,或者其他有效的方法对我有帮助吗?
Set
不允许重复,例如使用List
。如果开始允许它们,您将违反Comparator
的契约! - dacwemap.entrySet().stream().sorted(Comparator.comparing(e->-e.getValue())).forEach(System.out::println);
- manoj jangam