Как отфильтровать Stream по году?
Нужно выбрать из рабочих одного с наивысшей зарплатой, устроившегося работать в 2017 году.
В процессе два вопроса возникает:
1.Почему такой код не выводит ничего на экран?
staff.stream().filter(d->d.getWorkStart().getYear()==2017).max(Comparator.comparing(Employee::getSalary)).ifPresent(System.out::println);
2.В каком формате нужно указать дату если фильтровать с помощью метода before или after?
staff.stream().filter(d->d.getWorkStart().before(????)).max(Comparator.comparing(Employee::getSalary)).ifPresent(System.out::println);
Ответы (1 шт):
Автор решения: Leeeny
→ Ссылка
Я думаю ваш вопрос поставлен слегка некорректно.
- В первом случае сначала фильтруются работники, которые были наняты в 2017, а потом выводится объект коллекции staff, у которого наибольшая зарплата, перепроверьте коллекцию, из которой вы создаете стрим.
- Здесь я могу посоветовать вам использовать вызов deprecated конструктора Date(int year, int month, int date) или же воспользоваться Date(long date), который рекомендован к использованию, но дату к нему вам необходимо передавать как long означающий количество миллисекунд, которые прошли с 1 Января, 1970, 00:00:00 GMT. Более подробно с другими конструкторами вы можете ознакомиться здесь https://docs.oracle.com/javase/8/docs/api/java/util/Date.html
P.S. Лучше все-таки было уточнить, что класс находится в пакете java.util, а также вставить код, где вы заполняете staff значениями хотя бы частично.