【发布时间】:2021-08-22 21:06:51
【问题描述】:
我需要按键对 LinkedHashMap 进行排序,这是通过转换为 List 并使用 Collections.sort 实现的。但它只适用于英文字母,现在我需要对俄语做同样的事情,它不再适用了。
请在下面查看我的代码。我尝试添加Collator collator = Collator.getInstance(new Locale("ru", "RU"));,但没有帮助...
private static void sortKeys(Map<String, Integer> map) {
Set<Map.Entry<String, Integer>> wordSet = map.entrySet();
List<Map.Entry<String, Integer>> wordEntryList = new ArrayList<Map.Entry<String, Integer>>(wordSet);
Collections.sort(wordEntryList, new Comparator<Map.Entry<String, Integer>>() {
@Override
public int compare(Map.Entry<String, Integer> o1, Map.Entry<String, Integer> o2) {
Collator collator = Collator.getInstance(new Locale("ru", "RU"));
return collator.compare(o1.getKey(), o2.getKey());
}
});
map.clear();
for (Map.Entry<String, Integer> m : wordEntryList) {
map.put(m.getKey(), m.getValue());
}
}
key是俄语单词,value是数字,需要key排序。请看下面的例子。
预期:
- - 18
- пушкин - 18
- полете - 15
- тигруля - 15
- 游戏 - 12
- котенок - 12
- красив - 11
- манул - 11
实际:
- пушкин - 18
- - 18
- тигруля - 15
- полете - 15
- котенок - 12
- 游戏 - 12
- манул - 11
- красив - 11
单词是 Map 中的键,数字是值。数字是单独排序的,在排序中没有任何作用。
【问题讨论】:
-
有一个非常相似的问题的解决方案,但它是在 PHP 中。 stackoverflow.com/questions/27187285/…你不妨看看
-
您的输入和预期输出是什么?这里是说英语的人。
-
给出简短的示例输入数据,并显示预期结果与实际结果。
-
您仍然没有显示一致的 MCVE。当我使用此输入 {пушкин=18, тигруля=15, манул=11, котенок=12, красив=11, наше=18, игрив=12, полете=15} 运行您的代码时,我得到以下结果:{игрив=12 , котенок=12, красив=11, манул=11, наше=18, полете=15, пушкин=18, тигруля=15} 与您的“实际”结果不符。在我的任何实验中,我都无法匹配您的预期或实际结果。例如,我总是以
наше结尾,而不是在第一或第二位置。虽然我对俄语或西里尔字母一无所知,但您的代码还有其他问题。 -
@BasilBourque 显然,该地图应该按值降序排序并仅作为次要标准按键升序。但是,问题中没有说明这一点,也没有反映在显示的代码和接受的答案中,这无济于事。
标签: java sorting collections