可选的 ifPresent 否则调用另一个函数
Optional ifPresent otherwise call another function
我编写了有效的代码,但是我不得不创建额外的行,有没有办法将其压缩成一行?逻辑:取最后一页,正则查找,如果没有找到,取前一页正则查找
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
来调用一些函数,该函数在可选项为空时计算值。如果存在一个值,则它 return 是该值,否则 return 是提供函数产生的结果。在您的情况下,您必须通过 Supplier<String>
。此外,展开 Optional
后的 return 类型应该是 String
,而不是 Optional<String>
。
String totalBoxes = totalBoxesLastPage
.orElseGet(() -> nextToLastPage.flatMap(p -> p.locate(INVOICE_TOTAL_AMOUNT_BOXES))
.orElseThrow(IllegalStateException::new));
这对我来说很有效,我真的很盲目,因为看不到 .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)));
}
我编写了有效的代码,但是我不得不创建额外的行,有没有办法将其压缩成一行?逻辑:取最后一页,正则查找,如果没有找到,取前一页正则查找
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
来调用一些函数,该函数在可选项为空时计算值。如果存在一个值,则它 return 是该值,否则 return 是提供函数产生的结果。在您的情况下,您必须通过 Supplier<String>
。此外,展开 Optional
后的 return 类型应该是 String
,而不是 Optional<String>
。
String totalBoxes = totalBoxesLastPage
.orElseGet(() -> nextToLastPage.flatMap(p -> p.locate(INVOICE_TOTAL_AMOUNT_BOXES))
.orElseThrow(IllegalStateException::new));
这对我来说很有效,我真的很盲目,因为看不到 .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)));
}