我有一个 ArrayList,其中包含一些包含 3 个参数(id、name、salary)的对象。未排序列表:
public class Employee {
private int id;
private String name;
private double salary;
public Employee(int _id, String _name, double _salary) {
this.id = _id;
this.name = _name;
this.salary = _salary;
}
public int getEmployeeID () {
return this.id;
}
public String getEmployeeName () {
return this.name;
}
public double getMonthSalary() {
return this.salary;
}
public static void main(String[] argc) {
ArrayList<Employee> list = new ArrayList<Employee>();
list.add(new Employee(1, "asd", 1300));
list.add(new Employee(7, "asds", 14025)); // this
list.add(new Employee(2, "nikan", 1230));
list.add(new Employee(3, "nikalo", 12330));
list.add(new Employee(8, "aaaa", 14025)); // and this are equal
list.add(new Employee(4, "nikaq", 140210));
list.add(new Employee(5, "nikas", 124000));
list.add(new Employee(6, "nikab", 14020));
}
}
我想按薪水对列表进行排序,如果薪水相等,则按字母顺序对他们的名字进行排序。我尝试使用Collections.sort();
,但它按所有参数排序。
例如:14025 和 14025 相等,因此按名称排序:asds, aaaa --> aaaa, asds
这是我尝试过的:
for (int i = 0; i < list.size() - 1; i++) {
for (int j = 0; j < list.size() - 1; j++) {
boolean isSorted = false;
if (list.get(j + 1).getMonthSalary() > list.get(j).getMonthSalary()) {
Employee temprary = list.get(j);
list.set(j, list.get(j + 1));
list.set(j + 1, temprary);
isSorted = true;
}
if (isSorted) {
if (list.get(j).getMonthSalary() == list.get(j + 1).getMonthSalary()) {
Collections.sort(list, new Comparator < Employee > () {
@Override
public int compare(Employee s1, Employee s2) {
return s1.getEmployeeName().compareToIgnoreCase(s2.getEmployeeName());
}
});
}
}
}
}
最佳答案
Java有一个内置的机制来处理这样的问题 - Comparator
s。你不应该重新发明轮子:
list.sort(Comparator.comparing(Employee::getMonthSalary)
.thenComparing(Employee::getEmployeeName));
关于java - 如果某些参数相等,如何对对象参数进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38032784/