Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/drupal/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 基于HashMap值的反向顺序?_Java - Fatal编程技术网

Java 基于HashMap值的反向顺序?

Java 基于HashMap值的反向顺序?,java,Java,使用的HashMap是: public static HashMap<User,Integer> onlineUsers = new HashMap<User,Integer>(); 如何按降序打印值 5 2 1 我已经看到了如何使用树映射来实现这一点,但在本例中,键不能是整数。HashMap只是键/值对,并且没有顺序 但是,可以使用Map.entry的SortedSet按值对映射进行排序。有关如何进行排序,请参阅本文,因为根据您的说法,treeMap不是一个选项,您

使用的HashMap是:

public static HashMap<User,Integer> onlineUsers = new HashMap<User,Integer>();
如何按降序打印值

5
2
1
我已经看到了如何使用树映射来实现这一点,但在本例中,键不能是整数。

HashMap只是键/值对,并且没有顺序


但是,可以使用Map.entry的SortedSet按值对映射进行排序。有关如何进行排序,请参阅本文

,因为根据您的说法,treeMap不是一个选项,您可以通过hashmap进行迭代,并将值保存在临时arrayList中。现在对其使用排序操作,然后输出结果

贴图不按值排序。有些像TreeMap,按键排序,有些像HashMap,根本不排序

因此,您需要做的是获取值集合并对其进行排序

List<Integer> values = new ArrayList<>(map.values());
Collections.sort(values, Collections.reverseOrder())
你可以这样做

// for each value
map.values()
   // sort them in reverse order
   .sort(Collections.reverseOrder())
   // and print each one
   .forEach(System.out::println);
假设要通过减小值对键进行排序。你可以这样做

map.entrySet()
   .sort(Comparator.comparing(Map.Entry::getValue()).reversed())
   .map(Map.Entry::getKey())
   .forEach(System.out::println);

如果要按照添加元素的顺序进行迭代器,应该使用


树映射是一个有序映射。这意味着它使用or接口对元素进行排序。它根据与其他元素的比较方式进行排序和迭代。LinkedHashMap将根据您插入元素的顺序进行排序。

哈希映射是无序的。我使用了TreeMap和Collections.sort,但我遇到了一个例外:对于我的用户对象,“不能强制转换为java.lang.Comparable”。TreeMap不按值排序。
map.entrySet()
   .sort(Comparator.comparing(Map.Entry::getValue()).reversed())
   .map(Map.Entry::getKey())
   .forEach(System.out::println);