Как в 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());}