RFR: 8196106: Support nested infinite or recursive flat mapped streams [v8]
Viktor Klang
vklang at openjdk.org
Tue Dec 10 11:47:48 UTC 2024
On Wed, 27 Nov 2024 16:01:53 GMT, Michel Charpentier <duke at openjdk.org> wrote:
>> Viktor Klang has updated the pull request incrementally with one additional commit since the last revision:
>>
>> Addressing review feedback
>
> I just noticed this improved performance in Java 23. However, it still doesn't fit my needs because this doesn't work:
>
>
> Stream.of(1)
> .flatMap(c -> Stream.generate(() -> 1).flatMap(x -> Stream.generate(() -> x)))
> .iterator()
> .next()
>
>
> Should it work? And how else can one use some stream elements in a non-terminal way?
> (See my forum question here: https://forums.oracle.com/ords/apexds/post/laziness-of-stream-iterators-3439.)
@charpov `Stream::iterator()` and `Stream::spliterator()` both consume the stream when they are invoked, so they are terminal operations. Converting a push-style stream (which the reference implementation of Stream is) to a pull-style stream (which Spliterator and Iterator are) has limitations—as you discovered. In the future, questions like these are likely better submitted to [core-libs-dev](https://mail.openjdk.org/pipermail/core-libs-dev/)
-------------
PR Comment: https://git.openjdk.org/jdk/pull/18625#issuecomment-2531340205
More information about the core-libs-dev
mailing list