tmn*_*tmn 23 java lambda java-8
为什么OptionalInt或其他原始可选风格似乎没有map()/ flatMap()方法?
该stream()地图操作允许对象和基本类型之间的转换.但为什么Optional不利用这个呢?
OptionalInt profileId = OptionalInt.of(124);
Optional<Profile> profile = profileId.map(i -> getProfile(i)); //no such valid map() method!
Run Code Online (Sandbox Code Playgroud)
原始选项没有设计map,flatMap和filter方法.
此外,根据Java8 in Action p.305,你不应该使用它们.在流上使用原语的理由是性能原因.在大量元素的情况下,装箱/拆箱开销很重要.但这是毫无意义的,因为Optional中只有一个元素.
此外,考虑例子:
public class Foo {
public Optional<Integer> someMethod() {
return Optional.of(42);
}
}
Run Code Online (Sandbox Code Playgroud)
并用作方法参考:
.stream()
.map(Foo::someMethod)
Run Code Online (Sandbox Code Playgroud)
如果将someMethod的返回类型更改为OptionalInt:
public OptionalInt someMethod() {
return OptionalInt.of(42);
}
Run Code Online (Sandbox Code Playgroud)
您不能将它用作方法参考,代码将无法编译:
.map(Foo::someMethod)
Run Code Online (Sandbox Code Playgroud)
在Java 9中似乎OptionalInt将有一个stream方法,它给你一个IntStream0或1元素.在这个流你当然可以使用map(),flatMap()或filter()等.
对于Java 8,我没有任何内容可以添加到user2138356的答案中.