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