Сравнить список с использованием другой переменной, если элементы списка имеют одинаковое значение в одной переменной - PullRequest
0 голосов
/ 08 мая 2020

У меня есть класс Person с атрибутами name (string) и age (int):

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

Я создал список Person и сравнил их, используя возраст.

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 Ответ

2 голосов
/ 08 мая 2020

Начиная с Java 8, создание настраиваемого Comparator намного проще, и вы можете сравнивать несколько полей.

Вы можете использовать следующий код:

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

И вот и все.

Вы можете использовать его для сортировки вашей коллекции следующим образом:

Collections.sort(filteredList, Comparator.comparing(Person::getAge).thenComparing(Person::getName))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...