Java流排序()在西里尔文中不起作用

And*_*rii 1 java java-stream

排序在西里尔文中不能按预期工作。我使用 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)

Yas*_*jaj 5

您可以使用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)