我可以不映射/ flatMap一个OptionalInt吗?

为什么在OptionalInt或其他原始可选的flatMap()上似乎没有map() / flatMap()方法?

stream()映射操作允许在对象和基元之间进行转换。 但为什么Optional不利用这个呢?

 OptionalInt profileId = OptionalInt.of(124); Optional profile = profileId.map(i -> getProfile(i)); //no such valid map() method! 

原始选项没有设计mapflatMapfilter方法。

此外,根据Java8 in Action p.305,你不应该使用它们。 在流上使用原语的理由是性能原因。 在大量元素的情况下,装箱/拆箱开销很重要。 但这是毫无意义的,因为Optional中只有一个元素。

此外,考虑例子:

 public class Foo { public Optional someMethod() { return Optional.of(42); } } 

并用作方法参考:

 .stream() .map(Foo::someMethod) 

如果将someMethod的返回类型更改为OptionalInt

 public OptionalInt someMethod() { return OptionalInt.of(42); } 

您不能将它用作方法参考,代码将无法编译:

 .map(Foo::someMethod) 

似乎在Java 9中, OptionalInt将有一个stream方法,为您提供一个包含0或1个元素的IntStream 。 在这个流上你当然可以使用map()flatMap()filter()等。

对于Java 8,我没有任何内容可以添加到user2138356的答案中 。