Rob*_*ert 1 java arrays sorting collections
我有这样的清单:
ArrayList<String> al = new ArrayList<String>();
al.add("James Smith");
al.add("MARIA GARCIA");
al.add("Maria Garcia");
al.add("DAVID SMITH");
Run Code Online (Sandbox Code Playgroud)
我使用了集合排序并忽略了大写字母。
Collections.sort(al, String.CASE_INSENSITIVE_ORDER);
Run Code Online (Sandbox Code Playgroud)
它适用于所有人,但因为MARIA GARCIA它仍然保留在小写字母之前Maria Garcia。有什么办法可以改变它吗?
如果两个项目相等,则它们的顺序不会改变*。
通过使用忽略大小写的比较器,这些字符串是相等的。
如果你想在两个项目相等时应用不同的排序,你可以thenComparing像这样扩展比较器:
Collections.sort(al, String.CASE_INSENSITIVE_ORDER
.thenComparing(
Comparator.comparing(String::toString)
.reversed()));
Run Code Online (Sandbox Code Playgroud)
在这种情况下可以更简单地写成:
Collections.sort(al, String.CASE_INSENSITIVE_ORDER
.thenComparing(Comparator.reverseOrder()));
Run Code Online (Sandbox Code Playgroud)
*这就是为什么另一个答案有效,但你不想多次排序,它效率低下,读者更难理解,因为它是向后写的,并且不是一种你可以在所有其他情况下重用的模式。