假设我想查看一个对象是否存在于流中,如果它不存在,则抛出一个 Exception。一种方法是使用 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
类型的行为?这样做是不是不好的做法?