为什么好像没有map()
/flatMap()
OptionalInt 或其他原始可选风格的方法?
The stream()
映射操作允许对象和基元之间的转换。但为什么Optional不利用这一点呢?
OptionalInt profileId = OptionalInt.of(124);
Optional<Profile> profile = profileId.map(i -> getProfile(i)); //no such valid map() method!
原始选项没有map, flatMap and filter设计方法。
此外,根据Java8 实践 p.305 https://rads.stackoverflow.com/amzn/click/com/1617291994你不应该使用它们。
在流上使用原语的理由是性能原因。如果元素数量巨大,装箱/拆箱开销会很大。但这是毫无意义的,因为Optional中只有一个元素。
此外,考虑示例:
public class Foo {
public Optional<Integer> someMethod() {
return Optional.of(42);
}
}
以及用法作为方法参考:
.stream()
.map(Foo::someMethod)
如果将 someMethod 的返回类型更改为可选整数:
public OptionalInt someMethod() {
return OptionalInt.of(42);
}
您不能将其用作方法引用,并且代码将无法编译:
.map(Foo::someMethod)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)