Скажем, я хочу посмотреть, существует ли объект в потоке, а если нет, то выбросьте исключение. Один из способов, который я мог бы сделать, - использовать метод orElseThrow
:
List<String> values = new ArrayList<>();
values.add("one");
//values.add("two"); // exception thrown
values.add("three");
String two = values.stream()
.filter(s -> s.equals("two"))
.findAny()
.orElseThrow(() -> new RuntimeException("not found"));
А как насчет обратного? Если я хочу создать исключение, если найдено какое-либо совпадение:
String two = values.stream()
.filter(s -> s.equals("two"))
.findAny()
.ifPresentThrow(() -> new RuntimeException("not found"));
Я мог бы просто сохранить Optional
и выполнить проверку isPresent
после:
Optional<String> two = values.stream()
.filter(s -> s.equals("two"))
.findAny();
if (two.isPresent()) {
throw new RuntimeException("not found");
}
Есть ли способ достичь этого поведения ifPresentThrow
? Является ли попытка сделать таким образом плохую практику?