可选的 ifPresent 否则调用另一个函数

Optional ifPresent otherwise call another function

我编写了有效的代码,但是我不得不创建额外的行,有没有办法将其压缩成一行?逻辑:取最后一页,正则查找,如果没有找到,取前一页正则查找

Optional<String> totalBoxesLastPage = lastPage.locate(INVOICE_TOTAL_AMOUNT_BOXES);
    Optional<String> totalBoxes = totalBoxesLastPage.isPresent() ? 
                                      totalBoxesLastPage : nextToLastPage
                                     .flatMap(p -> p.locate(INVOICE_TOTAL_AMOUNT_BOXES));

谢谢大家

您可以与供应商一起使用 orElseGet 来调用一些函数,该函数在可选项为空时计算值。如果存在一个值,则它 return 是该值,否则 return 是提供函数产生的结果。在您的情况下,您必须通过 Supplier<String>。此外,展开 Optional 后的 return 类型应该是 String,而不是 Optional<String>

String totalBoxes = totalBoxesLastPage
    .orElseGet(() -> nextToLastPage.flatMap(p -> p.locate(INVOICE_TOTAL_AMOUNT_BOXES))
        .orElseThrow(IllegalStateException::new));

这对我来说很有效,我真的很盲目,因为看不到 .or 函数

 or(Supplier<? extends Optional<? extends T>> supplier)

 public Optional<String> findBetweenTwo(Page lastPage,Optional<Page> nextToLast,Pattern pattern) {
    return lastPage.locate(pattern).or(() -> nextToLast.flatMap(p -> p.locate(pattern)));
}