是否有充分的理由说明为什么没有:
OptionalInt.ofNullable(Integer);
如果要将 optional/可为空的Integer转换为OptionalInt,这似乎是一个完美的选择。我目前正在使用我编写的该util方法:
public static OptionalInt optionalIntOfNullable(Integer integer){
return integer == null ? OptionalInt.empty() : OptionalInt.of(integer);
}
没什么不好的,但是,我想知道我是否错过了什么。
最佳答案
OptionalInt
优于Optional<Integer>
的优点是,如果源是原始int
值,则可以避免装箱操作。
如果源已经是Integer
,那么这将不适用。在这种情况下,如果您的下一个操作需要int
,则拆箱操作将始终发生,无论是在构造OptionalInt
时,还是在将下一个操作与Optional<Integer>
链接时。因此,使用OptionalInt
没有任何优势。
请记住,这些类并不是要用作参数类型,因此不应有任何代码希望将OptionalInt
作为输入。引用a recent statement from Brian Goetz:
(我强调)
顺便说一句,您可以使用Optional<Integer>
的常规操作将OptionalInt
转换为Optional
,而无需使用条件运算符:
Integer boxed=null;
OptionalInt optInt=Optional.ofNullable(boxed)
.map(OptionalInt::of).orElseGet(OptionalInt::empty);
从Java 9开始,您还可以使用
OptionalInt optInt=Stream.ofNullable(boxed).mapToInt(Integer::intValue).findAny();
但是,如上所述,这没有必要,因为通常您只需指定后续操作即可使用
int
或Integer
(如果存在)。且适用于Optional
和OptionalInt
。