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

标签 java sorting java-stream

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

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

如果我使用 sorted(String.CASE_INSENSITIVE_ORDER)那么订单是!Ab 1ab ab AB Ab Za --> 这次,AB 在 ab 后面。

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


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

最佳答案

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

list.stream()
    .sorted(String.CASE_INSENSITIVE_ORDER
            .thenComparing(Comparator.naturalOrder()))

评论后

list.stream()
    .sorted(String.CASE_INSENSITIVE_ORDER
            .thenComparing(Comparator.reverseOrder()))

关于Java 按字母顺序对字符串进行排序并保持 ASCII 顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60318657/

相关文章:

java - 项目单击监听器不适用于自动滚动回收器 View

arrays - 删除和移动数组元素

sorting - 堆索引示例说明

java - 将 Java List 转换为 Pivot 格式

Java:多次使用枚举

java - Servlet 多部分请求问题

每个调用方法和 addAll 的 Java 8 lambda

java - 为什么要在 Java Stream 接口(interface)中重载 varargs 方法 of()?

java - 为什么 FlowLayout 中左侧的 TextField 不显示文本提示,而右侧的 TextField 却显示?

javascript - 如何在 Javascript 中对数组中的对象集合进行排序?