ArrayList sorting on the basis of object property
本问题已经有最佳答案,请猛点这里访问。
下面是Employee bean类。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
我有其他EmployeeTest类,在其中我创建Employee类的对象并存储在ArrayList中。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | import java.util.ArrayList; public class EmployeeTest { public static void main(String[] args) { ArrayList<Employee> empList = new ArrayList<Employee>(); Employee emp1 = new Employee(); emp1.setAge(15); emp1.setName("Employee1"); Employee emp2 = new Employee(); emp2.setAge(10); emp2.setName("Employee1"); empList.add(emp1); empList.add(emp2); for(Employee emp : empList) { System.out.println("employee name :" + emp.getName()); System.out.println("employee age :" + emp.getAge()); } } } |
现在我有一个问题是,我想根据员工阶级年龄属性对数组列表进行排序。所以请解释一下我如何分类。
在其他答案中建议的接口是一个选项。
但是,一般来说,我建议不要执行
想象一下你想按照他们的年龄去解雇那些雇员。一次在上级,一次在下级。你怎么能这么做?现在想象一下你曾经想用他们的名字命名他们的年龄,一次用他们的字母顺序。如果不执行
你可以创造一种方法
1 2 3 4 5 6 7 8 9 10 11 | private static Comparator<Employee> byAge() { return new Comparator<Employee>() { @Override public int compare(Employee o1, Employee o2) { return o1.getAge() - o2.getAge(); } }; } |
然后你可以简单地呼唤
1 |
如果你想反复排列他们,你可以打电话给他们。
1 |
如果你想用他们的名字命名他们,你可以创建一个方法
1 2 3 4 5 6 7 8 9 10 11 | private static Comparator<Employee> byName() { return new Comparator<Employee>() { @Override public int compare(Employee o1, Employee o2) { return o1.getName().compareTo(o2.getName()); } }; } |
与他们一起
1 |
这是比执行
你可以使用收藏品,采用一种自定义比较法:
1 2 3 4 5 6 7 8 9 10 | import java.util.Collections; import java.util.Comparator; [...] Collections.sort(empList, new Comparator<Employee>() { @Override public int compare(Employee x, Employee y) { return Integer.compare(x.getAge(), y.getAge()); } }); |
我使用匿名
你需要写一个比较器。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | class EmployeeAgeComparator implements Comparator<Employee> { @Override public int compare(Employee e1, Employee e2) { if (e1.getAge() > e2.getAge()) { return -1; } else if (e1.getAge() < e2.getAge()) { return 1; } return 0; } } |
这样的方法。
1 |
希望你能帮忙。
植入
1 | class Employee implements Comparable<Employee> { |
在
ZZU1
然后你就可以像这里一样
1 |
这是一个简单的输出算法。我们保存下一个下载的价值,所以我们可以交换。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | for (int i = 0; i < empList.size(); i++) { int smallest = i; for (int j = i; j < numbers.length; j++) { if (empList.get(j).getAge() < emplist.get(smallest).getAge()) smallest = j; } int temp = empList.get(i).getAge(); empList.set(i, empList.get(smallest)) empList.set(smallest, temp); } |
我想你可能想在不同的性能上抽签,所以在这种情况下,你应该创建一个适当的比较器,并使用同一种方法(同一种方法)。
你的类别需要实现可比接口和EDOCX1[…]方法。然后你可以使用EDOCX1