Es gibt verschiedene Methoden, um ImmutableMap
wie Immutable.of(Key, value)
und deren Überladung zu erstellen.
Diese Methoden existieren jedoch nicht für HashMap
oder LinkedHashMap
in der Klasse Maps
.
Gibt es eine bessere Möglichkeit, dies zu tun, oder Guava geht davon aus, dass eine solche Karte immer eine konstante Karte ist, und ImmutableMap
die beste Option ist, und HashMap
nicht zur Verfügung stehen muss.
Warum sollten Sie diese für eine reguläre HashMap
oder LinkedHashMap
haben? Sie können dies einfach tun:
Map<String, Object> map = Maps.newHashMap();
map.put(key, value);
Die Sache mit ImmutableMap
ist, dass die Erstellung etwas umständlicher ist. Sie müssen zuerst eine Builder
erstellen, dann die Schlüssel-Wert-Paare in den Builder einfügen und dann build()
aufrufen, um Ihre ImmutableMap
zu erstellen. Die ImmutableMap.of()
-Methode verkürzt das Schreiben, wenn Sie eine ImmutableMap
mit einem einzigen Schlüsselwertpaar erstellen möchten.
Überlegen Sie, was Sie schreiben müssten, wenn Sie die ImmutableMap.of()
-Methode nicht verwenden würden:
ImmutableMap<String, Object> map = ImmutableMap.builder()
.put(key, value);
.build();
Maps.newHashMap(ImmutableMap.of(...))
ausprobieren
Der Unterschied ist, dass Sie für eine unveränderliche Karte haben alles im Voraus bereitstellen müssen, da Sie sie nach der Konstruktion nicht ändern können. Bei veränderbaren Karten können Sie einfach die Karte erstellen und dann die Einträge hinzufügen. Das macht es zwar etwas schwieriger, eine Map in einem einzelnen Ausdruck zu erstellen, aber tend ist kein Problem, bei dem Sie nach meiner Erfahrung sowieso eine veränderliche Map wollen.
ImmutableMap.of()
gibt eine Hash-basierte unveränderliche Karte ohne Reihenfolge zurück.
Wenn Sie eine beständige unveränderliche Karte benötigen, ist ImmutableSortedMap.of()
eine Wahl.
ImmutableSortedMap bietet Methoden wie firstKey()
, lastKey()
, headMap(K)
und tailMap(K)
;
Beide Klassen stellen die copyOf(Map)
-Methode bereit.
können Sie die copyOf
-Methode von ImmutableMap
nicht verwenden, die hier beschrieben wird?
es sollte so etwas sein
Map newImmutableMap = ImmutableMap.copyOf(yourMap);