Получение объекта с максимальным значением свойства из списка объектов 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
.