java使用流延迟调用多个服务
仅当前一个调用返回null时,如何使用stream评估多个服务调用?即
Stream.of(service1(), service2(), service3())
.filter(Objects::nonNull)
.findFirst()
.ifPresent(this::doSomething);
基本上,我不希望在不需要调用的情况下调用所有三个服务调用,我感兴趣的是,是否有更好的方法在不使用大量服务调用的情况下实现这一点
if(service1() != null)
...
else if(service2() != null)
...
else if(service3() != null)
...
# 1 楼答案
假设
service1()
、service2()
等中的每一个都返回相同的数据类型,那么您可以提供一个lambda表达式来调用每个服务并返回该类型aSupplier<Result>
,其中Result
就是该数据类型。您也可以提供方法引用流将惰性地进行计算,因此使用方法引用允许您利用这一点并将执行延迟到需要时
执行链的其余部分可以按您的方式工作
# 2 楼答案
下面是一个完整的示例: