内置的简短方法来获取Hashmap的键数组(按Java中的值排序)

时间:2018-08-24 08:05:58

标签: java arrays sorting hashmap

在StackOverflow中已经提出了许多有关按键或值对Hashmap进行排序的问题。其中大多数已发布多年。例如,thisthisthis。我正在搜索任何 onlineer方法,以按其值对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的键,则已排序键的顺序是否仍会保留? 谢谢!

1 个答案:

答案 0 :(得分:2)

使用流,您可以编写:

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

比您的iOS示例要长一些,但还不错。

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

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