> From: "Rafael Winterhalter" <rafael....@gmail.com>
> To: "core-libs-dev" <core-libs-...@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 

Reply via email to