Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么不是';有IntStream.flatMapToObj()吗?_Java_Java 8_Java Stream - Fatal编程技术网

Java 为什么不是';有IntStream.flatMapToObj()吗?

Java 为什么不是';有IntStream.flatMapToObj()吗?,java,java-8,java-stream,Java,Java 8,Java Stream,我正在尝试这样做: Stream<Object> stream = IntStream.of(...) .flatMapToObj(i -> getStreamOfObjects(i)); Stream=IntStream.of(…) .flatMapToObj(i->getStreamOfObjects(i)); 不幸的是,IntStream.flatMapToObj()甚至在Java9中也不存在 为什么它被遗漏了 推荐的解决方法是什么 只要写 IntS

我正在尝试这样做:

Stream<Object> stream = IntStream.of(...)
        .flatMapToObj(i -> getStreamOfObjects(i));
Stream=IntStream.of(…)
.flatMapToObj(i->getStreamOfObjects(i));
不幸的是,
IntStream.flatMapToObj()
甚至在Java9中也不存在

  • 为什么它被遗漏了
  • 推荐的解决方法是什么
  • 只要写

     IntStream.of(...).mapToObj(i -> getStreamOfObjects(i)).flatMap(stream -> stream)
    

    如果您不介意装箱每个
    int
    值的成本,那么使用装箱流是可行的

    Stream<Object> stream = IntStream.of(...).boxed().flatMap(i -> getStreamOfObjects(i));
    
    Stream=IntStream.of(…).boxed().flatMap(i->getStreamOfObjects(i));
    
    为什么它被遗漏了

    API提供了可重用的构建块。这里的相关构建块是
    IntStream
    mapToObj
    flatMap
    。通过这些,您可以实现您想要的:将流中的对象映射到对象,然后获得平面贴图。提供构建块的排列是不现实的,而且更难扩展

    推荐的解决方法是什么

    如前所述,使用可用的构建块(
    mapToObj
    +
    flatMap
    ):

    Stream=IntStream.of(…)
    .mapToObj(i->Stream.of(…))
    .flatMap(…);
    
    回答得好。我想我下意识地认为
    IntStream.flatMapToObj()
    Stream.flatMapToInt()
    一样必要,但事实显然不是这样。这个
    .flatMap(…)
    应该是
    .flatMap(Function.identity())
    由于您已经使用mapToObj映射到流,我对此并不确信-在API中,我们提供了
    .boxed()
    方法,这应该消除了对
    .mapToObj(…)
    的需要,因为所有这些都可以重写为
    .boxed().map(…)
    。因此,提供
    .mapToObj()。在本例中,如果有一个函数返回原语
    int
    的流,则装箱
    int
    将是一种浪费,甚至可能导致性能问题。换句话说,
    mapToObj
    是必要的,因为Java中的原语类型。(悲伤和丑陋,但却是真的。)是的,是的,我没有想到装箱的成本:)正如注意的那样,您可以使用
    Function.identity()
    而不是
    stream->stream
    Stream<Object> stream = IntStream.of(...)
        .mapToObj(i -> Stream.of(...))
        .flatMap(...);