我想根据名称属性对列表进行排序
并且排序应该像 A, a, B, b ... 在 java 中升序
如果有人在这方面帮助我,那就太好了。
例如
package corejava.compare;
import java.util.Comparator;
public class FirstNameSorter implements Comparator<Employee>{
@Override
public int compare(Employee o1, Employee o2) {
return o1.getFirstName().compareTo(o2.getFirstName());
}
}
我使用了这个比较器如下:
Employee e1 = new Employee(1, "aTestName", "dLastName", 34);
Employee e2 = new Employee(2, "A", "pLastName", 30);
Employee e3 = new Employee(3, "T", "sLastName", 31);
Employee e4 = new Employee(4, "D", "zLastName", 25);
Employee e5 = new Employee(5, "b", "zLastName", 25);
List<Employee> employees = new ArrayList<Employee>();
employees.add(e2);
employees.add(e3);
employees.add(e1);
employees.add(e4);
employees.add(e5);
Collections.sort(employees, new FirstNameSorter());
// Sorted by firstName
System.out.println(employees);
然后我得到以下输出:
A
D
T
b
但是,我想要以下输出:
A
b
D
T
最佳答案
就像评论中提到的@Zabuza 一样,您想要的顺序是几乎 不区分大小写的字母顺序,但不完全是,因为您希望在大写和小写字符相同时将它们组合在一起信。
您可以通过简单地添加小写字母并比较它们来完成此操作,如果小写检查显示匹配,则单独检查以恢复为纯字典顺序:
例如
public class FirstNameSorter implements Comparator<Employee> {
@Override
public int compare(Employee o1, Employee o2) {
int precheck = o1.getFirstName().toLowerCase().compareTo(o2.getFirstName().toLowerCase());
return precheck != 0 ? precheck : o1.getFirstName().compareTo(o2.getFirstName());
}
}
关于java - 排序结果在 Java 中以 A, a, B, b... 的形式递增返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57277475/