On Tue, 11 Nov 2025 02:43:14 GMT, Patrick Strawderman <[email protected]> wrote:
> When `Comparator.naturalOrder()` was explicitly supplied to a collection such > as `TreeSet`, or passed into the `sorted` method of a stream, the sorted > characteristic was not preserved, causing unnecessary buffering and duplicate > sorting. > > Example: > > > TreeSet<Integer> sortedSet = new TreeSet<>(Comparator.naturalOrder()); > sortedSet.add(1); > sortedSet.add(2); > // SortedOps.OfRef.opWrapSink is not a no-op > sortedSet.stream().sorted().forEach(System.out::println); > > or > > TreeSet<Integer> sortedSet = new TreeSet<>(); > sortedSet.add(1); > sortedSet.add(2); > // SortedOps.OfRef.opWrapSink is not a no-op > sortedSet.stream().sorted(Comparator.naturalOrder()).forEach(System.out::println); > > > This PR updates `SortedOps.makeRef` and `StreamOpFlag.fromCharacteristics` to > handle the above cases and avoid the unnecessary sort step. This pull request has now been integrated. Changeset: 67ef81eb Author: Patrick Strawderman <[email protected]> Committer: Viktor Klang <[email protected]> URL: https://git.openjdk.org/jdk/commit/67ef81eb78b28e5dcdf91785b476dfd0858cbd16 Stats: 46 lines in 4 files changed: 16 ins; 4 del; 26 mod 8362958: Unnecessary copying / sorting in Streams using Comparator.naturalOrder() Reviewed-by: vklang, liach ------------- PR: https://git.openjdk.org/jdk/pull/28226
