排序在西里尔文中不能按预期工作。我使用 sorted() 方法,但它不起作用
public static void main(String[] args) {
List<String> list = new ArrayList<>();
list.add("??????");
list.add("???????????");
list.add("???????");
list.add("?????");
list.add("????");
list.add("?????????");
list.add("??????");
list.add("???-?????");
list.add("??????");
list.add("????");
list.stream().sorted().forEach(System.out::println);
}
Run Code Online (Sandbox Code Playgroud)
结果:
??????
???????????
???????
?????
????
?????????
??????
???-?????
??????
????
Run Code Online (Sandbox Code Playgroud)
您可以使用Oracle 文档中记录的Collator类似方法实现按字母顺序排序。
对于支持LocaleS,你可以参照支持的人,其中ru-RU也记录(使用uk-UA了乌克兰产生相同的结果)
Collator collator = Collator.getInstance(new Locale("ru", "RU"));
List<String> list = new ArrayList<>();
list.add("??????");
list.add("???????????");
list.add("???????");
list.add("?????");
list.add("????");
list.add("?????????");
list.add("??????");
list.add("???-?????");
list.add("??????");
list.add("????");
list.stream().sorted(collator::compare).forEach(System.out::println);
Run Code Online (Sandbox Code Playgroud)
印刷
???????????
???????
?????
????
??????
????
?????????
??????
???-?????
??????
Run Code Online (Sandbox Code Playgroud)
由于@Holger的评论,它甚至可以简化为collator,而不是collator::compare
list.stream().sorted(collator).forEach(System.out::println);
Run Code Online (Sandbox Code Playgroud)