首页 > 解决方案 > 可选 ifPresent 否则调用另一个函数

问题描述

我编写了有效的代码,但是我必须创建额外的行,有没有办法在一行中压缩它?逻辑:取最后一页,用正则搜索功能,如果没有找到,取上一页,用正则搜索功能

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

感谢你们

标签: javaoptional

解决方案


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

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

推荐阅读