为什么没有IntStream.flatMapToObj()?

我正在尝试做这样的事情:

Stream stream = IntStream.of(...) .flatMapToObj(i -> getStreamOfObjects(i)); 

不幸的是,即使在Java 9中, IntStream.flatMapToObj()也不存在。

  1. 为什么遗漏了?
  2. 什么是推荐的解决方法?

它为什么被遗漏了?

API提供可重用的构建块。 这里的相关构建块是IntStreammapToObjflatMap 。 通过这些,您可以实现您想要的效果:将流映射到对象,然后获得平面地图。 提供构建块的排列是不实际的,并且难以扩展。

什么是推荐的解决方法?

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

 Stream stream = IntStream.of(...) .mapToObj(i -> Stream.of(...)) .flatMap(...); 

写吧

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

如果你不介意装箱每个int值的成本,使用盒装流将有效。

 Stream stream = IntStream.of(...).boxed().flatMap(i -> getStreamOfObjects(i));