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

标签 java option-type

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

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/

相关文章:

swift - 使用 map 隐式展开可选的奇怪行为

ruby - 为 nil :NilClass"in Ruby for optional associations? 处理每个 "undefined method ` 的优雅方式

swift - 你如何检查一个类型在 Swift 中是否是可选的?

java - 调试改造错误消息的最佳方法

java - 无法在JPA中进行子查询

java - 如何使用Hibernate在java中创建泛型方法进行CRUD操作

ios - Swift if let 在 Optional(nil) 上评估成功

java - 在一年中添加天数 - Java

java - 谁能举例说明如何在java中的InvokeAll() Callable方法中使用Generic?

java - 我真的可以从 lambda 返回以从方法返回并中断它的执行吗?