java - 内置的短方法来获取按 Java 中的值排序的 Hashmap 键数组

标签 java arrays sorting hashmap

StackOverflow 中提出了许多关于按键或值对 Hashmap 进行排序的问题。其中大部分已发布多年。例如,this , this ,和this 。我正在寻找任何在线方法来按值对 Hashmap 键进行排序并获取排序后的键的数组。在 iOS 中,以下代码行会产生相同的结果:

NSArray* sortedKeys = [myDictionary keysSortedByValueUsingSelector:@selector(compare:)]};

在这里,如果 NSDictionary myDictionary 包含以下对象:

{
 S: 1;
 A: 5;
 N: 8;
 T: 2;
 O: 0;
}

然后是sortedKeys包含以下对象:

(N, A, T, S, O)

最新的Java中可以使用这种方法吗?我应该遵循冗长的解决方案吗?给出了冗长的解决方案 here产生一个排序的 Hashmap(键按各自的值排序)。如果我使用 keySet() 提取此排序 Hashmap 的键,排序键的顺序是否仍然存在? ? 谢谢!

最佳答案

使用流,您可以编写:

List<String> keys = map.entrySet().stream()
                      .sorted(Entry.comparingByValue())
                      .map(Entry::getKey)
                      .collect(toList());

它比您的 iOS 示例长一点,但也没有那么糟糕。

要以相反的顺序获取列表,您可以使用相反的顺序比较器:

.sorted(Collections.reverseOrder(Entry.comparingByValue()))

关于java - 内置的短方法来获取按 Java 中的值排序的 Hashmap 键数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52000047/

相关文章:

java - 了解 AsyncTask 与 Web 服务器访问

java - 从数组中逐行填充二叉树

java - Quartz 产生未处理的空指针异常

java - Spring/Hibernate/HSQLDB 组合的 session /事务问题

java - getView() 在第二个 Activity 中返回 null

javascript - 多维数组之和javascript

javascript - ES6 : Find an object in an array by one of its properties

c++ - 这些编译器之间有什么区别吗?

python - 按字母顺序排序 URL 以下载图像

java - where().eq ("colName", new SelectArg()) 是什么意思?