在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之间添加更多的互操作性。

10-02 23:09