有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

如果列表项在一个变量中具有相同的值,则java比较列表使用不同的变量

我有一个具有name(string)和age(int)属性的类Person:

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

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

    public String getName() {
        return name;
    }

    public int getAge() {
        return age;
    }
}

我创建了一个人员列表,并使用年龄对他们进行了比较

List<Person> persons = new ArrayList<>();
persons.add("Andrew", 18);
persons.add("Barry", 25);
persons.add("Cynthia", 33);
persons.add("Darwin", 33);

Collections.sort(persons, new Comparator<Person>() {
    @Override
    public int compare(Person lhs, Person rhs) {
        return lhs.getAge() < rhs.getAge() ? -1 : lhs.getAge() == lhs.getAge() ? 0 : 1;
    }
});

如果两个项目的年龄相等,如何使用名称进行比较


共 (1) 个答案

  1. # 1 楼答案

    从Java8开始,创建自定义Comparator要容易得多,并且可以比较多个字段

    您可以使用以下代码:

    Comparator.comparing(Person::getAge).thenComparing(Person::getName)
    

    就这样

    您可以使用它对收藏进行如下排序:

    Collections.sort(filteredList, Comparator.comparing(Person::getAge).thenComparing(Person::getName))