Roh*_*hit 1 java sorting collections
以下是Employee bean类.
public class Employee {
public String name;
public int age;
public Employee()
{
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge()
{
return age;
}
public void setAge(int age)
{
this.age = age;
}
}
Run Code Online (Sandbox Code Playgroud)
我有其他EmployeeTest类,在其中我创建Employee类的对象并存储在ArrayList中.
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());
}
}
}
Run Code Online (Sandbox Code Playgroud)
现在我有一个问题,就是我想根据Employee类的age属性对ArrayList进行排序.所以请解释我该如何排序.
Mar*_*o13 10
让其实现Comparable接口,如其他答案所示,是一种选择.
但总的来说,我建议不要实现Comparable接口,只要该类没有毫无疑问的自然顺序.因为Employee,肯定没有 自然顺序.
想象一下,你想根据他们的年龄对员工进行排序.一旦按升序排列,一次按降序排列.你怎么能做到这一点?现在想象一下你想按照他们的年龄对它们进行一次排序,并按照字母顺序按照他们的名字排序.如果不实施,你就无法做到这一点Comparator.这就是我在这里推荐的内容:
你可以创建一个类似的方法
private static Comparator<Employee> byAge()
{
return new Comparator<Employee>()
{
@Override
public int compare(Employee o1, Employee o2)
{
return o1.getAge() - o2.getAge();
}
};
}
Run Code Online (Sandbox Code Playgroud)
然后你可以简单地打电话
Collections.sort(empList, byAge());
Run Code Online (Sandbox Code Playgroud)
如果要按相反顺序对它们进行排序,可以调用
Collections.sort(empList, Collections.reverseOrder(byAge()));
Run Code Online (Sandbox Code Playgroud)
如果要按名称对它们进行排序,可以创建方法
private static Comparator<Employee> byName()
{
return new Comparator<Employee>()
{
@Override
public int compare(Employee o1, Employee o2)
{
return o1.getName().compareTo(o2.getName());
}
};
}
Run Code Online (Sandbox Code Playgroud)
然后用它们排序
Collections.sort(empList, byName());
Run Code Online (Sandbox Code Playgroud)
这比实施更加通用Comparable.