基于对象属性的ArrayList排序

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.