RFR: 8265029: Preserve SIZED characteristics on slice operations (skip, limit) [v7]
Tagir F.Valeev
tvaleev at openjdk.java.net
Thu May 27 06:13:44 UTC 2021
On Mon, 24 May 2021 19:51:04 GMT, Paul Sandoz <psandoz at openjdk.org> wrote:
>> Tagir F. Valeev has updated the pull request incrementally with one additional commit since the last revision:
>>
>> Trailing whitespace removed
>
> src/java.base/share/classes/java/util/stream/AbstractPipeline.java line 471:
>
>> 469: int flags = getStreamAndOpFlags();
>> 470: long size = StreamOpFlag.SIZED.isKnown(flags) ? spliterator.getExactSizeIfKnown() : -1;
>> 471: if (size != -1 && StreamOpFlag.SIZE_ADJUSTING.isKnown(flags) && !isParallel()) {
>
> Very nice. It's a good compromise to support only for sequential streams, since we have no size adjusting intermediate stateless op. If that was the case we would need to step back through the pipeline until the depth was zero, then step forward. I think it worth a comment here to inform our future selves if we ever add such an operation.
>
> Strictly speaking we only need to call `exactOutputSize` if the stage is size adjusting. Not sure it really matters perf-wise. If we leave as is maybe add a comment.
It's hard to imagine SIZE_ADJUSTING stateless intermediate op (probably the op that duplicates every stream element like `flatMap(x -> Stream.of(x, x))` as a single op?). Nevertheless, I added the comment. Please check if it's clear enough. Thanks!
-------------
PR: https://git.openjdk.java.net/jdk/pull/3427
More information about the core-libs-dev
mailing list