【发布时间】:2021-08-03 18:39:17
【问题描述】:
Optional<T> 有一个 or() 方法,您可以将选项链接在一起
var o1 = Optional.<String>empty();
var o2 = Optional.of("some string");
Optional<String> o3 = o1.or(() -> o2); // o3 = o2
OptionalInt 没有这个功能。你会如何做与上面类似的事情?
不诉诸于
var oi1 = OptionalInt.empty();
var oi2 = OptionalInt.empty();
OptionalInt oi3 = oi1.isPresent() ? oi1 : oi2;
【问题讨论】:
-
@Rogue 实际上
or()是在 Java 9 中添加的。 -
我的错,它是在 Java 9(不是 11)中添加的。也就是说,仍然可以通过
#orElse或#orElseGet模拟使用,您只需要事先将#map调用到Optional<Optional<T>>。总的来说,这实际上是为了什么用例?通常,简单地“操作”可选并使用某种形式的分支会更容易。 -
OptionalInt 也没有
map()。 -
如果你真的需要表示一个可为空的整数,为什么不直接使用
Optional<Integer>? -
@Rogue
map或mapToObj,没关系。OptionalInt两者都没有。这是一个普遍的问题,从第一天开始,原始可选值就缺少Optional、map、flatMap、filter的方法。新的or方法并不特别……