Java对象List如何根据某个字段排序?

在Java中,我们可以使用Comparator接口对对象的List进行排序。假设我们有一个类Person,包含一个age字段,你想要根据age字段对List进行排序。可以使用Collections.sort()方法或者List的sort()方法进行排序,如下所示。

使用Collections.sort()方法

import java.util.*;

class Person {
    private String name;
    private int age;

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

    public int getAge() {
        return age;
    }

    @Override
    public String toString() {
        return "Person{name='" + name + "', age=" + age + "}";
    }
}

public class Main {
    public static void main(String[] args) {
        List<Person> people = new ArrayList<>();
        people.add(new Person("Alice", 30));
        people.add(new Person("Bob", 25));
        people.add(new Person("Charlie", 35));

        Collections.sort(people, new Comparator<Person>() {
            @Override
            public int compare(Person p1, Person p2) {
                return Integer.compare(p1.getAge(), p2.getAge());
            }
        });

        System.out.println(people);
    }
}

使用List的sort()方法和Lambda表达式

从Java 8开始,可以使用List的sort()方法和Lambda表达式,代码更加简洁,如下所示。

import java.util.*;

class Person {
    private String name;
    private int age;

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

    public int getAge() {
        return age;
    }

    @Override
    public String toString() {
        return "Person{name='" + name + "', age=" + age + "}";
    }
}

public class Main {
    public static void main(String[] args) {
        List<Person> people = new ArrayList<>();
        people.add(new Person("Alice", 30));
        people.add(new Person("Bob", 25));
        people.add(new Person("Charlie", 35));

        people.sort((p1, p2) -> Integer.compare(p1.getAge(), p2.getAge()));

        System.out.println(people);
    }
}

使用Comparator.comparing

当然我们也可以使用Comparator.comparing来简化代码,如下所示。

import java.util.*;

class Person {
    private String name;
    private int age;

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

    public int getAge() {
        return age;
    }

    @Override
    public String toString() {
        return "Person{name='" + name + "', age=" + age + "}";
    }
}

public class Main {
    public static void main(String[] args) {
        List<Person> people = new ArrayList<>();
        people.add(new Person("Alice", 30));
        people.add(new Person("Bob", 25));
        people.add(new Person("Charlie", 35));

        people.sort(Comparator.comparing(Person::getAge));

        System.out.println(people);
    }
}

总结

以上三种方法都可以根据某个字段对对象的List进行排序,使用Lambda表达式或Comparator.comparing可以让代码更加简洁。

原文链接:,转发请注明来源!