Как в Java сравнивать элементы коллекции по отдельным полям
Допустим дана модель:
class Model { Long id; public Model(Long id) { this.id = id; } public Long getId() { return id; }}В коллекцию добавлены объекты класса Model.
public static void main(String[] args) { List<Model> tests = Arrays.asList(new Model(90l), new Model(1l));}Как определить, у какого из объектов поле id (в нашем примере id, а вообще любое поле) является самым большим в данной коллекции?
Проблема решается с помощью Stream API. Такие методы как max() и sorted() принимают в качестве аргумента Comparator, который сравнивает элементы коллекции между собой любым нужным способом. При этом если сравнение элементов коллекции сводится к сравнению одного поля каждого элемента (как в нашем примере, где одна модель считается "больше" другой, если больше её id, независимо от значений других полей), то для такого случая в интерфейс Comparator добавлен дефолтный метод comparing, который принимает в качестве аргумента геттер необходимого поля.
Таким образом поиск модели с максимальным id будет выглядеть так:
public static void main(String[] args) {List<Model> models = Arrays.asList(new Model(1l), new Model(90l)); Model max = models.stream().max(Comparator.comparing(Model::getId)).get(); System.out.println(max.getId());}