繁体   English   中英

按 Java 中的值顺序返回 hashmap 键?

[英]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方法:

  1. 将 HashMap 转换为列表
  2. 使用custom comparator排序列表
  3. 然后创建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);

这个比较简单。

  • stream 使用 Entry 比较器对值进行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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM