列表是: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
)
最佳答案
问题是 ab
和 AB
是相等的;因此它们本身在结果中是无序的。
所以添加一个正常的比较,因为大写字母在小写字母之前。
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/