Получение объекта из stream или выброс исключения

Есть код (здесь Date date условно, может быть любой POJO класс):

Date date;
List<Date> array = new ArrayList<>();
array.add(new Date());

Optional<Date> first = array.stream().filter(d -> d.after(new Date())).findFirst();

if (first.isPresent()) {
    date = first.get();
} else {
    throw new Exception();
}

Могу я каким-то образом сделать это без if/else, чтобы сразу получить объект или бросить исключение, то есть дописать что-то после findFirst()?


Ответы (1 шт):

Автор решения: Дмитрий

Не просто можно, но и нужно, Optional не принято использовать с условными операторами:

List<Date> array = new ArrayList<>();
array.add(new Date());
Date result = array.stream().filter(d -> d.after(new Date())).findFirst().orElseThrow(RuntimeException::new);

P.S. лучше использовать класс LocalDateTime (либо другой класс из этого пакета в зависимости от потребоностей), т.к. класс Date по факту устарел.

→ Ссылка