📌  相关文章
📜  如何在Java中按属性对对象的 ArrayList 进行排序?(1)

📅  最后修改于: 2023-12-03 15:24:32.578000             🧑  作者: Mango

如何在Java中按属性对对象的 ArrayList 进行排序?

在Java中,可以使用 Collections.sort() 方法来对 ArrayList 进行排序。但是在排序时,需要传入一个比较器来指定排序的规则。下面我们将介绍如何通过属性对对象的 ArrayList 进行排序。

准备工作

我们假设有一个 Person 类,该类有两个属性:nameage,并且我们已经创建了一个 ArrayList<Person> 对象:

public class Person {
    private String name;
    private int age;

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public int getAge() {
        return age;
    }
}

ArrayList<Person> persons = new ArrayList<>();

persons.add(new Person("Tom", 18));
persons.add(new Person("Jerry", 20));
persons.add(new Person("Scott", 16));
按 name 属性排序

要按照 Person 对象的 name 属性排序,我们需要创建一个比较器来实现排序规则。在比较器中,我们需要调用 Person 对象的 getName() 方法,获取其 name 属性,并将其与其他 Person 对象的 name 属性进行比较。比较器的示例代码如下:

Comparator<Person> nameComparator = new Comparator<Person>() {
    @Override
    public int compare(Person o1, Person o2) {
        return o1.getName().compareTo(o2.getName());
    }
};

在上述代码中,我们实现了 Comparator<Person> 接口,并重写了其中的 compare() 方法。这个方法定义了两个参数 o1o2,分别代表待比较的两个 Person 对象,我们在方法中使用 getName() 方法获取它们的 name 属性,并使用 compareTo() 方法进行比较。最终的比较结果将决定 o1o2 的排序顺序。

接下来,我们可以使用这个比较器来对 ArrayList<Person> 进行排序,示例代码如下:

Collections.sort(persons, nameComparator);

在上述代码中,我们将 persons 对象和 nameComparator 比较器传入 Collections.sort() 方法中,即可完成对 persons 对象的排序。

按 age 属性排序

要按照 Person 对象的 age 属性排序,我们与按照 name 属性排序类似,同样需要创建一个比较器来实现排序规则。在比较器中,我们需要调用 Person 对象的 getAge() 方法,获取其 age 属性,并将其与其他 Person 对象的 age 属性进行比较。比较器的示例代码如下:

Comparator<Person> ageComparator = new Comparator<Person>() {
    @Override
    public int compare(Person o1, Person o2) {
        return o1.getAge() - o2.getAge();
    }
};

在上述代码中,我们同样实现了 Comparator<Person> 接口,并重写了其中的 compare() 方法,但与之前不同的是,我们使用 getAge() 方法获取 age 属性,并使用减法来比较其大小。这个方法的返回值为负数,则表示 o1 小于 o2;返回值为正数,则表示 o1 大于 o2;返回值为 0,则表示 o1 等于 o2

接下来,我们同样可以使用这个比较器来对 ArrayList<Person> 进行排序,示例代码如下:

Collections.sort(persons, ageComparator);

在上述代码中,我们将 persons 对象和 ageComparator 比较器传入 Collections.sort() 方法中,即可完成对 persons 对象的排序。

总结

我们可以通过实现比较器来指定排序规则,然后使用 Collections.sort() 方法来对 ArrayList 进行排序。这种方式通常适用于需要按照对象的某个属性进行排序的场景,例如按照商品价格进行排序、按照学生分数进行排序等等。