2014-01-08 5 views
20

Рассмотрим класс UserКак найти Max Date в списке <Object>?

public class User{ 
    int userId; 
    String name; 
    Date date; 
} 

Теперь у меня есть List<User> размер 20, как я могу найти дату макс в списке без использования ручного итератор?

+1

Ваш вопрос непонятен для меня. Не могли бы вы подробнее рассказать об этом? – Maroun

+4

Сортируйте свой список с помощью пользовательского компаратора и сделайте первый результат. –

+2

Что вы подразумеваете под «ручным итератором». Does 'Collections.max (yourList, yourComparator)' считается как «руководство»? – Pshemo

ответ

51

Поскольку вы просите лямбды, вы можете использовать следующий синтаксис с Java 8:

Date maxDate = list.stream().map(u -> u.date).max(Date::compareTo).get(); 

или, если у вас есть поглотитель для даты :

Date maxDate = list.stream().map(User::getDate).max(Date::compareTo).get(); 
+0

Спасибо, тоже выполнил эту работу для меня! Это решение позволяет избежать использования «Компаратора», который может раздражать, поскольку он не распознает тип объектов в «потоке». – bashoogzaad

+0

Вам нужно сначала использовать карту, чтобы получить поток дат. –

+0

Это более безопасный способ использования orElse (null), а затем .get(); – zeroke

-1
class User implements Comparable<User> { 
    int UserId; 
    String name; 
    Date date; 
    //all your getter and setters go here 

    public int compareTo(User usr1) { 
     return this.getDate().compareTo(usr1.getDate()); 
    } 
} 

Затем используйте

Collections.sort(YourUserList); 
+0

это это нормально, если ваш Пользователь упорядочен по дате, иначе лучше использовать Компаратор. Это позволяет вам произвольно сортировать исходя из ваших текущих потребностей. – Romski

+0

Я предполагаю, что вы намеревались написать 'usr1.date', так как нет« другого », ни« дата »не инкапсулирована –

+0

жаль, что я испортил свою личную работу и ответ! :(исправлено! спасибо, что указали его. – Helios

2
Comparator<User> cmp = new Comparator<User>() { 
    @Override 
    public int compare(User user1, User user2) { 
     return user1.date.compareTo(user2.date); 
    } 
}; 

Collections.max(list, cmp);