java - 在调用方法之前检查两个可选内容

标签 java lambda option-type

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

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,但我只是在玩,甚至想知道这是否可能。

最佳答案

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

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

虽然这看起来很丑陋。为什么不首先检查 s1Optionals2Optional 是否都有值?

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

关于java - 在调用方法之前检查两个可选内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42983602/

相关文章:

java - 为什么我们总是要抛出新的异常?我们可以不将该异常存储为实例变量并每次都抛出相同的实例吗?

java - 按随机数递增 ArrayList 元素

java - 在并发 HashMap 中重新散列期间检索

java - 将此空检查转换为 java 8 可选

java - 从嵌套可选检查中的列表中获取元素

swift - 默认情况下,常量未分配的可选值不会为零

java - 如何生成和访问 JWT key

recursion - Dr Racket 中的 Lambda 递归

java - 在 Function<T,R> 中格式化日期

c++ - 是否(或将会)在 lambda 表达式中使用熟悉的模板语法?