java Google Guava可选如何短接多个链式表达式
假设我有多个方法,每个方法都返回可选的。我想将它们链接在一起,这样,如果其中一个返回一个带有值的可选值,那么链应该停止传播,并且应该在该点停止。e、 假设f1、f2、f3各返回可选
如果我这样做
Optional<T> result = f1.or(f2).or(f3);
我看到,即使f2返回可选值。对于(t),f3仍然会被调用
我希望它的行为像一个短路表达式,但它不是这样工作的
谁能帮我一下吗
你可以在下面搜索框中键入要查询的问题!
假设我有多个方法,每个方法都返回可选的。我想将它们链接在一起,这样,如果其中一个返回一个带有值的可选值,那么链应该停止传播,并且应该在该点停止。e、 假设f1、f2、f3各返回可选
如果我这样做
Optional<T> result = f1.or(f2).or(f3);
我看到,即使f2返回可选值。对于(t),f3仍然会被调用
我希望它的行为像一个短路表达式,但它不是这样工作的
谁能帮我一下吗
# 1 楼答案
您需要使用
Supplier
使其变为惰性:例如,与Mike的回答相同:
输出:
# 2 楼答案
您可以通过在Java8中使用短路流来实现这一点。您可以对结果应用映射,使结果也显示为
Optional<T>
,而不是Optional<Optional<T>>
输出: