Получение объекта с максимальным значением свойства из списка объектов Java 8

У меня есть класс с именем Contact, который имеет переменную Date lastUpdated;.

Я хотел бы вывести Contact из List<Contact> с максимальной переменной lastUpdated.

Я знаю, что это можно сделать, написав произвольный компаратор и используя Collections.max, но мне было интересно, есть ли способ сделать это в Java 8, который не требует использования настраиваемого компаратора, поскольку я просто хочу для того, чтобы вытащить один из них с максимальной датой только в одном месте в моем коде, а класс Contact не всегда должен использовать переменную lastUpdated для сравнения экземпляров.

Ответы

Ответ 1

а класс Contact не должен всегда использовать последнюю переменную для сравнения экземпляров

Таким образом, вам нужно будет предоставить настраиваемый компаратор, когда вы захотите сравнить несколько экземпляров с помощью своего свойства lastUpdated, так как это означает, что этот класс не сопоставим по умолчанию с этим полем.

Comparator<Contact> cmp = Comparator.comparing(Contact::getLastUpdated);

Как вы знаете, вы можете использовать Collections.max или Stream API, чтобы получить экземпляр max в соответствии с этим полем, но вы не можете избежать создания настраиваемого компаратора.

Ответ 2

Запись пользовательского компаратора в Java-8 очень проста. Использование:

Comparator.comparing(c -> c.lastUpdated);

Итак, если у вас есть List<Contact> contacts, вы можете использовать

Contact lastContact = Collections.max(contacts, Comparator.comparing(c -> c.lastUpdated));

Ответ 3

Попробуйте следующее (непроверенное):

contacts.stream().max(Comparator.comparing(Contact::getLastUpdated)).get()

Ответ 4

Используйте List<T>.stream().max(Comparator<T>).get() после того, как вы определили подходящий Comparator.