[英]Returning hashmap keys in order of value in Java?
有没有办法做到这一点? 我在想它可以用流来完成,但我对它们不是很有经验,希望得到一些帮助。
例如:如果 hashmap 当前是这样的:
“一”:5
“乙”:2
“C”:4
然后返回 ["A", "C", "B"]。
Map<String, Integer> sortedMap = unsortMap.entrySet().stream()
.sorted(Map.Entry.comparingByKey())
.collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue,
(oldValue, newValue) -> oldValue, LinkedHashMap::new));
你可以使用 TreeMap 它会给你按键排序
List<Character> sortedKey() {
Map<Character, Integer> map = new TreeMap<>();
List<Character> list = new ArrayList<>();
for(Map.Entry entry: map.entrySet()) {
list.add((Character)entry.getKey());
}
return list;
}
使用collections.sort
方法:
custom comparator
排序列表key
列表(根据它们的值排序)代码:
// function to sort hashmap by values
public static List sortByValue(HashMap < String, Integer > hm) {
// Create a list from elements of HashMap
List < Map.Entry < String, Integer > > list =
new LinkedList < Map.Entry < String, Integer > > (hm.entrySet());
// Sort the list
Collections.sort(list, new Comparator < Map.Entry < String, Integer > > () {
public int compare(Map.Entry < String, Integer > o1,
Map.Entry < String, Integer > o2) {
return (o2.getValue()).compareTo(o1.getValue());
}
});
// put data from sorted list to hashmap
List < String > temp = new ArrayList < String > ();
for (Map.Entry < String, Integer > aa: list) {
temp.add(aa.getKey());
}
return temp;
}
给定
Map<String,Integer> map = Map.of("A",5,"B",2,"C",4);
这个比较简单。
entrySet
和排序。LinkedHashSet
来保持顺序,您也不能像访问 List 那样容易地访问集合中的元素。List<String> keys = map.entrySet().stream()
.sorted(Entry.<String,Integer>comparingByValue()
.reversed()).map(Entry::getKey)
.toList(); // java 16+ -- prior to Java 16 use .collect(Collectors.toList())
System.out.println(list);
印刷
[A, C, B]
使用方法Map.Entry.comparingByValue创建 Map.Entries 的新列表并排序列表
List<Map.Entry<String,Integer>> list = new ArrayList<>(map.entrySet());
list.sort(Map.Entry.<String, Integer>comparingByValue().reversed());
System.out.println(list);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.