java - ArrayList 根据对象属性排序

标签 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;
    }
}

我有其他 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());
        }
    }
}

现在我有一个问题是我想根据 Employee 类年龄属性对 ArrayList 进行排序。所以请解释我该如何排序。

最佳答案

按照其他答案中的建议,让类实现 Comparable 接口(interface)是一种选择。

但总的来说,我建议不要实现Comparable 接口(interface),只要该类没有明确的自然顺序。对于 Employee,肯定没有 自然顺序

假设您想根据员工的年龄对员工进行排序。一次按升序排列,一次按降序排列。你怎么能做到这一点?现在想象一下,您想要按他们的年龄对他们进行一次排序,然后按字母顺序对他们的名字进行一次排序。如果不实现 Comparator,您将无法做到这一点。这就是我在这里推荐的内容:

你可以创建一个像这样的方法

private static Comparator<Employee> byAge()
{
    return new Comparator<Employee>()
    {
        @Override
        public int compare(Employee o1, Employee o2)
        {
            return o1.getAge() - o2.getAge();
        }
    };        
}

然后你可以简单地调用

Collections.sort(empList, byAge());

如果想倒序排序,可以调用

Collections.sort(empList, Collections.reverseOrder(byAge()));

如果你想按名字排序,你可以创建一个方法

private static Comparator<Employee> byName()
{
    return new Comparator<Employee>()
    {
        @Override
        public int compare(Employee o1, Employee o2)
        {
            return o1.getName().compareTo(o2.getName());
        }
    };        
}

然后用

对它们进行排序
    Collections.sort(empList, byName());

这比实现 Comparable 更通用。

关于java - ArrayList 根据对象属性排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21659695/

相关文章:

java - 无法在 RecyclerView 中显示从 Firebase 检索到的数据

java - Java 中的高效 XSLT 管道(或将结果重定向到源)

java - 按字母顺序对链接列表进行排序

PHP - 按特定索引重新排列数组

perl - 在 Perl 中对字母数字哈希键进行排序?

csv - 使用node-csv和meteor-file将CSV导入到集合中

java - 如何在java中迭代dto的所有成员?

java - Cloudera HBase 连接超时异常

objective-c - 如何为属性的集合属性编写我自己的迭代器(使用正确的类型转换)?

java - 为什么不同类型的空集合相等?