在调用方法之前检查两个选项内容

时间:2017-03-23 17:58:55

标签: java lambda optional

我有一个方法C(),它接受两个非可选参数,这两个参数都被包装并从之前调用的其他两个方法返回。

Optional<String> s1Optional = methodA();
Optional<String> s2Optional = methodB();

方法C定义:

private Optional<String> methodC(String s1, String s2){
    return Optional.ofNullable("abc");
}

我不想使用s1Optional.get()和s2Optional.get()作为methodC()的参数,因为它违背了使用Optional的唯一目的。

我知道我可以使用

s1Optional.map(s1 -> methodC(s1, s2Optional).orElseGet(Optional.get());

仅当s1Optional不为空时从methodC()获得有效返回,但要求是我应该对s2Optional执行相同操作。 即,我应该检查s1Optional和s2Optional来执行methodC。

据我所知,并不总是需要使用Optionals,但我只是在玩,并想知道这是否可行。

1 个答案:

答案 0 :(得分:1)

我不太确定我是否理解正确,但我认为您可以嵌套地图方法调用来实现您想要的效果。

s1Optional.map(
    s1 -> s2Optional.map(s2 -> methodC(s1, s2).orElse("")));

但这看起来很丑陋。为什么不检查s1Optionals2Optional是否都具有值?

if s1Optional.isPresent() && s2Optional.isPresent() {
    anotherMethod(s1Optional.get(), s2Optional.get());
}