Java 9 offers Map.of()
feature to easily create a map with fixed values.
Problem: I want to create a map that preserves order of insertion like LinkedHashMap
. Is that possible with that factory? At least map.of()
does not preserv the order...
There isn't a factory method like LinkedHashMap::of
indeed, and a Map
does not have an order per-se, so the only way I see it is to build a LinkedHashMap
if you really needed one.
Btw from the JEP itself:
Static factory methods on concrete collection classes (e.g., ArrayList, HashSet) have been removed from this proposal ...
There is another wrinkle, which is that static methods on classes are inherited by subclasses. Suppose a static factory method HashMap.of() were to be added. Since LinkedHashMap is a subclass of HashMap, it would be possible for application code to call LinkedHashMap.of(). This would end up calling HashMap.of(), not at all what one would expect!
Point here is that static
methods are inherited, but not overridable, thus if such a method would have been added to HashMap
it could have not been overridden in LinkedHashMap
.
If you can use guava
, you could use ImmutableMap
that is documented as:
An immutable, hash-based Map with reliable user-specified iteration order...