我不能 map/flatMap 一个 OptionalInt 吗?

Can I not map/flatMap an OptionalInt?

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

stream() 映射操作允许对象和图元之间的转换。但是为什么 Optional 不利用这个?

OptionalInt profileId = OptionalInt.of(124);

Optional<Profile> profile = profileId.map(i -> getProfile(i));  //no such valid map() method!

原始可选值在设计上没有 mapflatMapfilter 方法。

此外,根据 Java8 in Action p.305,您不应该使用它们。 在流上使用原语的理由是性能原因。在元素数量巨大的情况下,boxing/unboxing 开销很大。但这是毫无意义的,因为 Optional.

中只有一个元素。

此外,考虑示例:

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

以及作为方法参考的用法:

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

如果将 someMethod 的 return 类型更改为 OptionalInt:

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

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

.map(Foo::someMethod)

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

对于Java8 我没有什么要补充的