Why isn't there IntStream.flatMapToObj()?

2019-01-19 16:45发布

问题:

I'm trying to do something like this:

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

Unfortunately, IntStream.flatMapToObj() doesn't exist, even in Java 9.

  1. Why was it left out?
  2. What's a recommended workaround?

回答1:

Why was it was left out?

The API provides reusable building blocks. The relevant building blocks here are IntStream, mapToObj, flatMap. From these you can achieve what you want: map an in stream to objects, and then get a flat map. Providing permutations of building blocks would not be practical, and harder to extend.

What's a recommended workaround?

As hinted earlier, use the available building blocks (mapToObj + flatMap):

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


回答2:

Using a boxed stream would work if you don't mind the cost of boxing each int value.

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


回答3:

Just write

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