在StackOverflow中已经提出了许多有关按键或值对Hashmap进行排序的问题。其中大多数已发布多年。例如,this,this和this。我正在搜索任何 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的键,则已排序键的顺序是否仍会保留?
谢谢!
答案 0 :(得分:2)
使用流,您可以编写:
List<String> keys = map.entrySet().stream()
.sorted(Entry.comparingByValue())
.map(Entry::getKey)
.collect(toList());
比您的iOS示例要长一些,但还不错。
要以相反的顺序获取列表,可以使用逆序比较器:
.sorted(Collections.reverseOrder(Entry.comparingByValue()))