Сортировка списка объектов основана на абсолютной разнице поля объекта и заданного значения.(Джава) - PullRequest
0 голосов
/ 26 февраля 2019

Скажем, у меня есть класс с именем Person.

class Person(){
    private int age;
}

И у меня есть список лиц в возрасте 7, 2, 9, 4 и 17. Я хочу отсортировать список объектов Personв порядке возрастания по абсолютной разнице возраста человека с заданным значением.

Например, я хочу отсортировать лиц по абсолютной разнице возраста человека и данного возраста, скажем 7.

Результатом будет список объектов Persons с возрастами 7, 9, 4, 2, 17.

Это потому, что

abs(7 - 7) = 0
abs(7 - 9) = 2
abs(7 - 4) = 3
abs(7 - 2) = 5
abs(7 - 17) = 10

Как видите, я хочу отсортировать список объектов Persons на основена абсолютную разницу заданного значения (это значение не всегда одинаково).

Ответы [ 2 ]

0 голосов
/ 26 февраля 2019
List<Person> people = ...;
people.sort(Comparator.comparingInt(p -> Math.abs(7 - p.getAge())));
0 голосов
/ 26 февраля 2019

Вы можете создать класс компаратора, такой как этот:

public class MyComparator implements Comparator<Person> {
    private final int refAge;

    public MyComparator(int refAge) {
        this.refAge = refAge;
    }

    @Override
    public int compare(Person p1, Person p2) {
        return Integer.compare(Math.abs(p1.getAge()-refAge),
                Math.abs(p2.getAge()-refAge));
    }
}

, а затем использовать его для сортировки списка:

    List<Person> persons = ...;
    Collections.sort(persons, new MyComparator(7));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...