【发布时间】:2019-12-08 04:32:10
【问题描述】:
我想对 name 属性的 List 进行排序
并且排序应该像java中的A,a,B,b ...一样升序
如果有人在这方面帮助我,那就太好了。
例如
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
【问题讨论】:
-
更新问题
-
结果是
A, a, b而不是a, A, b有关系吗?大写是否应该总是在其对应的小写之前(比如 A 在 a 之前,B 在 b 之前)? -
是的,大写应该先像A,a,B,b
-
您当前的比较器按字典顺序进行比较,请参阅Wikipedia,因此它显然不是您想要的。您需要一种更复杂的比较器方法。例如,首先在忽略大小写的基础上进行比较(例如通过小写所有内容)。如果这两个元素相等,则按字典顺序比较它们(因为大写字母排在小写字母之前)。如果操作正确,比较器可能只有 1 到 3 行,并且也可以使用新的现代方法创建。
标签: java list collections comparator comparable