Factory methods for SequencedSet and SequencedMap
Remi Forax
forax at univ-mlv.fr
Thu Jan 16 07:44:15 UTC 2025
> From: "Rafael Winterhalter" <rafael.wth at gmail.com>
> To: "core-libs-dev" <core-libs-dev at openjdk.java.net>
> Sent: Thursday, January 16, 2025 8:13:17 AM
> Subject: Factory methods for SequencedSet and SequencedMap
> Hello,
Hello,
> I am happily taking SequencedSet and SequencedMap into use, but one
> inconvenience I encounter is the lack of factory methods for the two.
> In code where many (initial) collections have zero or one element (for later
> aggregation), I now write Set.of()/Set.of(one) and Map.of()/Map.of(key, value),
> as it makes the code shorter and more readable. Those collections are of course
> implicitly sequenced, but now I must make the variable type of the surrounding
> monad Set and Map, and simply assume that a LinkedHashSet or LinkedHashMap is
> used when a collection of more than one element is set, without requiring the
> interface type. This does not require any type casting, as I rely on the
> iteration order only, but the code loses some of its expressiveness.
> I did not find any discussion around introducing factories for
> SequencedSet.of(...) and SequencedMap.of(...), similar to those that exist in
> the Set and Map interfaces. Was this ever considered, and if not, could it be?
Thanks for re-starting that discussion, it was talked a bit, but not as it should be.
So the issue is that currently we do not have any compact, unmodifiable and ordered Set/Map implementation,
one use case is when you have data that comes from a JSON object as a Map and you want to keep the inserted order, if by example the JSON is a config file editable by a human, an other example is in unit tests where you want to help the dev to read the output of the test so the code that creates a Set/Map and what is outputed by the test should be in the same order.
Currently there is no good solution for those use cases because Set|Map.copyOf() does not keep the ordering.
I see two solutions, either we add a new SequenceSet|SequenceMap.of/copyOf, or we change the impleemntation of Set|Map.of()/copyOf().
Python had gone for the latter solution, which has the advantage a being simple from the user POV, but from an algorithm expert POV, a Set and a SequencedSet are different concepts we may want to emphasis ?
> Best regards, Rafael
regards,
Rémi
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://mail.openjdk.org/pipermail/core-libs-dev/attachments/20250116/0af7f1ed/attachment.htm>
More information about the core-libs-dev
mailing list