可选,如果存在,则调用另一个函数

问题描述 投票:0回答:2

我编写了有效的代码,但是我不得不创建额外的行,是否有办法将其压缩到一行中?逻辑:获取最后一页,通过正则表达式执行搜索功能,如果找不到,则获取前一页并通过正则表达式执行搜索功能

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

谢谢你们

java optional
2个回答
3
投票

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

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

0
投票

这对我来说很有效,因为看不到.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)));
}
© www.soinside.com 2019 - 2024. All rights reserved.