java列排序不会忽略大写字母
我的清单如下:
ArrayList<String> al = new ArrayList<String>();
al.add("James Smith");
al.add("MARIA GARCIA");
al.add("Maria Garcia");
al.add("DAVID SMITH");
我使用了集合排序,忽略了大写字母
Collections.sort(al, String.CASE_INSENSITIVE_ORDER);
它对所有的字母都有效,但对MARIA GARCIA
而言,它仍然位于较低的字母Maria Garcia
之前。有办法改变吗
# 1 楼答案
如果两个项目相等,则不会更改订单*
通过使用忽略大小写的比较器,这些字符串是相等的
如果希望在两个项相等时应用不同的排序,可以使用
thenComparing
扩展比较器,如下所示:在这种情况下,可以更简单地写为:
*这就是为什么other answer可以工作,但您不想多次排序,它效率低下,读者更难理解,因为它是反向编写的,并且不是一种在所有其他情况下都可以重用的模式
# 2 楼答案
在这种情况下,可以使用比较器链,如下所示:
输出:
# 3 楼答案
更新
感谢Holger提供了这个最简洁(IFAIK)的解决方案
只需将^{} 传递给
sort
方法,就可以完成这项工作输出:
原始答案
你可以先按相反的顺序对列表进行排序,然后按照你已经在做的方式进行排序
演示:
输出: