为什么没有IntStream.flatMapToObj()?

2022-09-01 22:55:32

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

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

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

  1. 为什么它被排除在外?
  2. 建议的解决方法是什么?

答案 1

为什么它被排除在外?

该 API 提供可重用的构建基块。此处的相关构建基块是 、 、 。从这些中,您可以实现所需的目标:将一个 in 流映射到对象,然后获得一个平面映射。提供构建块的排列是不切实际的,而且更难扩展。IntStreammapToObjflatMap

建议的解决方法是什么?

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

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

答案 2

如果您不介意对每个值进行装箱的成本,则使用盒装流将起作用。int

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

推荐