Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/398.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 可选的ifPresent,否则调用另一个函数_Java_Optional - Fatal编程技术网

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

Java 可选的ifPresent,否则调用另一个函数,java,optional,Java,Optional,我写的代码是有效的,但是我必须创建额外的行,有没有办法将其压缩到一行中?逻辑:取最后一页,通过正则表达式执行搜索功能,如果未找到,则取前一页,通过正则表达式执行搜索功能 Optional<String> totalBoxesLastPage = lastPage.locate(INVOICE_TOTAL_AMOUNT_BOXES); Optional<String> totalBoxes = totalBoxesLastPage.isPresent() ?

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

Optional<String> totalBoxesLastPage = lastPage.locate(INVOICE_TOTAL_AMOUNT_BOXES);
    Optional<String> totalBoxes = totalBoxesLastPage.isPresent() ? 
                                      totalBoxesLastPage : nextToLastPage
                                     .flatMap(p -> p.locate(INVOICE_TOTAL_AMOUNT_BOXES));
可选totalBoxesLastPage=lastPage.locate(发票\总金额\方框);
可选totalBoxes=totalBoxesLastPage.isPresent()?
totalBoxesLastPage:下一页最后一页
.flatMap(p->p.locate(发票\总额\金额\方框));

谢谢大家

如果可选项为空,您可以与供应商一起使用
orElseGet
调用一些函数来计算值。如果存在值,则返回该值,否则返回由提供函数生成的结果。在您的情况下,您必须通过
供应商
。此外,展开
可选
后的返回类型应该是
字符串
,而不是
可选


您可以与供应商一起使用
orElseGet
调用某些函数,如果可选项为空,则该函数将计算值。如果存在值,则返回该值,否则返回由提供函数生成的结果。在您的情况下,您必须通过
供应商
。此外,展开
可选
后的返回类型应该是
字符串
,而不是
可选


这对我来说是可行的,我真的因为看不见而失明

 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)));
}

or(Supplier这对我来说是可行的,我真的因为看不见东西而失明了

 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)));
}

or(供应商自Java 9以来,存在ifPresentOrElse(Consumer@zforgoifPresentOrElse是无效的,感谢您的评论。请提供一个最小的、可重复的示例:因为Java9有ifPresentOrElse(Consumer@zforgo如果撤销其无效,感谢您的评论。请提供一个最小的、可复制的示例:该示例不起作用,因为退货类型是可选的。供应商应为
供应商
类型。该示例不起作用,因为退货类型是可选的。供应商应为
供应商
是,如果您想返回一个
可选的
,那么
就是方法。另外请注意,
可选。或
在Java9或更高版本中可用。是的,如果您想返回一个
可选的
,那么
就是方法。另外请注意,
可选。或
在Java9或更高版本中可用。