Получить первые экземпляры подкласса из списка, используя Java 8 - PullRequest
4 голосов
/ 19 марта 2019

У меня есть два подкласса класса. Теперь у меня есть список, который может содержать любой из подклассов.

Теперь мне нужно перебрать список и получить первое вхождение подкласса B.

Я использовал ниже и ищу Java 8 / stream / lambda способ сделать это.

SeniorEmployee sEmp = null;    
for(Employee emp: empList){
if(emp instanceof SeniorEmployee)
 sEmp = emp;
 break;
}

1 Ответ

8 голосов
/ 19 марта 2019

Как насчет:

SeniorEmployee sEmp = emp.stream()
                         .filter(SeniorEmployee.class::isInstance)
                         .findFirst()
                         .map(SeniorEmployee.class::cast)
                         .orElse(null);

Где вы можете ввести другое значение по умолчанию в разделе orElse. Это решение использует findFirst, чтобы получить первый элемент, который соответствует Predicate

Также обратите внимание, что orElse(null) должен сделать код эквивалентным коду в вопросе. Лучше дать значение, отличное от null, так как это наносит ущерб всей цели Optional

...