在Java8流中,我可以使用mapToInt
方法创建一个IntStream
,该代码将为某些操作(例如OptionalInt
)返回findFirst
。为什么Optional
中没有类似的东西?
int i = Stream
.of("1") // just as an example
.mapToInt(Integer::parseInt) // mapToInt exists for streams
.findFirst() // this even returns an OptionalInt!
.getAsInt(); // quite handy
int j = Optional
.of("1") // same example
.map(Integer::parseInt) // no mapToInt available
.get().intValue(); // not as handy as for streams
最佳答案
显然,其他一些方法将出现在Java-9的Optionals中。但是,不太可能添加mapToInt
。我在core-libs-dev中几天前discussed这个问题。这是Paul Sandoz answer:
和later:
总的来说,我认为这是合理的。基本流的目的是在处理许多原始值时提高性能。但是,对于Optional
,使用原始值的性能提升(如果有的话)是非常微不足道的(与通过JIT编译器进行优化以进行额外装箱的流相比,机会更大)。同样,即使项目Valhalla不会出现在Java-9中,它也正在逐步发展,并且有可能在Java-10中我们最终看到泛型覆盖基元,因此这些基元 optional 项将变得完全不必要。在这种情况下,似乎不需要在对象Optional
和原始OptionalInt
之间添加更多的互操作性。