是否有充分的理由说明为什么没有:

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();

但是,如上所述,这没有必要,因为通常您只需指定后续操作即可使用intInteger(如果存在)。且适用于OptionalOptionalInt

10-06 06:15