2015-11-14 3 views
2

Я хочу переписать приведенный ниже код с помощью библиотеки Stream (allPeople - List<Person>).Получение максимального свойства с использованием Java 8

int maxYear = Integer.MIN_VALUE; 
Person oldest = null; 
for (Person p : allPeople) { 
    if (p.getDateOfDeath() > maxYear) { 
     oldest = p; 
     maxYear = p.getDateOfDeath(); 
    } 
} 

Я пытаюсь найти самый старый человек в списке людей (предполагается, что нет Возраст собственности на объект Person, это просто пример).

Как я могу переписать это с помощью Java 8?

+0

Не было найти один с самая высокая дата смерти просто найти того, кто умер совсем недавно, а не самого старого? –

ответ

3
Person oldest = allPeople.stream().max(comparingInt(Person::getDateOfDeath)).orElse(null); 

Этот код создает поток персонажа и выбирает максимальный элемент при сравнении даты смерти. Это делается с помощью Comparator.comparingInt(keyExtractor), причем ключ-экстрактор является ссылкой на дату смерти человека.

Если список пуст, то возвращается null.

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

Person oldest = allPeople.isEmpty() ? null : Collections.max(allPeople, comparingInt(Person::getDateOfDeath)); 
Смежные вопросы