我编写了有效的代码,但是我必须创建额外的行,有没有办法将其压缩为一行?逻辑:取最后一页,通过正则表达式执行搜索功能,如果没有找到,则取前一页,通过正则表达式执行搜索功能
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
与供应商一起调用某个函数,该函数在可选值为空时计算值。如果存在值,则返回该值,否则返回提供函数产生的结果。在你的情况下,你必须通过 Supplier<String>
。此外,解开 Optional
后的返回类型应该是String
,不是 Optional<String>
.
String totalBoxes = totalBoxesLastPage
.orElseGet(() -> nextToLastPage.flatMap(p -> p.locate(INVOICE_TOTAL_AMOUNT_BOXES))
.orElseThrow(IllegalStateException::new));
关于java - 可选 ifPresent 否则调用另一个函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59683309/