Java按字母顺序对字符串进行排序并保持ASCII顺序

Du *_*ran 2 java sorting java-stream

名单是: Arrays.asList("Za", "ab", "AB", "Sa", "1ab", "Ab", "!Ab");

如果我用stream().sorted()那么命令是:!Ab 1ab AB Ab Za ab--> 前面的ab不应该za。

如果我用sorted(String.CASE_INSENSITIVE_ORDER)那么顺序是!Ab 1ab ab AB Ab Za--> 这个时候,AB在ab后面。

有什么方法可以将这两个规则结合起来,以便我们按字母顺序排列列表并且大写大于小写?


添加示例1AB - A0B - AbD - aBD - abd1 - ZAB 按字母顺序排序(Z 永远不会在 a 前面)和数字 > 大写 > 小写 ( AbD > aBD)

Joo*_*gen 9

问题是abAB是相等的;因此它们本身在结果中是无序的。所以添加一个正常的比较,因为大写字母在小写字母之前。

list.stream()
    .sorted(String.CASE_INSENSITIVE_ORDER
            .thenComparing(Comparator.naturalOrder()))
Run Code Online (Sandbox Code Playgroud)

评论后

list.stream()
    .sorted(String.CASE_INSENSITIVE_ORDER
            .thenComparing(Comparator.reverseOrder()))
Run Code Online (Sandbox Code Playgroud)