Skip to content

Feat: add ImmutableMap.sortedCopyOf - #8591

Open
DerrickUnleashed wants to merge 5 commits into
google:masterfrom
DerrickUnleashed:immutable-map-sortedcopyof
Open

Feat: add ImmutableMap.sortedCopyOf#8591
DerrickUnleashed wants to merge 5 commits into
google:masterfrom
DerrickUnleashed:immutable-map-sortedcopyof

Conversation

@DerrickUnleashed

Copy link
Copy Markdown

Fixes #8552.
Adds two overloads, matching the existing ImmutableList.sortedCopyOf pattern:

  • sortedCopyOf(Map) - sorts by natural key order
  • sortedCopyOf(Comparator, Map) - sorts by a given key comparator
    The result is a regular ImmutableMap (hashing-based lookups), just with entries iterating in sorted order - handy when you want deterministic iteration without the O(log N) lookups of ImmutableSortedMap.
    Behaviour notes:
  • The sort is stable, so entries whose keys compare equal keep their input order.
  • If a key appears more than once, the last value wins, mirroring Builder.buildKeepingLast().
    Also includes a GWT super-source implementation and tests.

Returns an immutable map that iterates in sorted key order while still
using hashing for lookups, as an alternative to ImmutableSortedMap's
O(log N) lookups. The sort is stable, and duplicate keys are resolved
in favor of the last value, matching buildKeepingLast().

RELNOTES=`collect`: Added `ImmutableMap.sortedCopyOf`, which returns an
immutable map that is sorted by key.
Covers natural and comparator ordering, stability, null handling, and
duplicate-key behavior (last value wins).

RELNOTES=n/a
@google-cla

google-cla Bot commented Aug 4, 2026

Copy link
Copy Markdown

Thanks for your pull request! It looks like this may be your first contribution to a Google open source project. Before we can look at your pull request, you'll need to sign a Contributor License Agreement (CLA).

View this failed invocation of the CLA check for more information.

For the most up to date status, view the checks section at the bottom of the pull request.

@DerrickUnleashed
DerrickUnleashed marked this pull request as ready for review August 4, 2026 11:18
@cpovirk cpovirk added type=enhancement Make an existing feature better package=collect P3 no SLO labels Aug 15, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

P3 no SLO package=collect type=enhancement Make an existing feature better

Projects

None yet

Development

Successfully merging this pull request may close these issues.

ImmutableMap.sortedCopyOf

3 participants