1

在 Java 8 之前,我习惯用这种方式编写代码

import io.vavr.control.Option;

Option<String> nullableValueA=Option.of("toto");
Option<String> nullableValueB=Option.of(null);

if (nullableValueA.isEmpty() && nullableValueB.isEmpty()){
        throw new RuntimeException("Business exception");
}

我想用 Java API 甚至 vavr API 将下面的代码转换为纯 Java 函数样式

做这样的事情

nullableValueA.isEmpty()
.and(nullableValueB.isEmpty())
.then(
   () -> throw new RuntimeException("Business exception");
)

关于如何以最佳方式编写此代码的任何想法?

非常感谢你的帮助

4

1 回答 1

3

如果您使用的是 Java 9+,则可以使用

String value = Optional.ofNullable("<resolve valueA>")
                .or(() -> Option.ofNullable("<resolve valueB>"))
                .orElseThrow(() -> new RuntimeException("Business exception"));

这将为您提供第一个非空值,如果两者都为空,则抛出异常。

同样的事情可以在 Java 8 上使用类似的东西来实现:

String value = Optional.ofNullable("<resolve valueA>")
              .orElseGet(() -> Optional.ofNullable("<resolve valueB>")
                  .orElseThrow(() -> new RuntimeException("Business exception")));
于 2020-03-07T14:24:12.913 回答