Kopieren Sie die unveränderliche Karte in die änderbare Karte in Kotlin

11

Wenn ich ein immutableMap: Map<String, Int> habe und es in ein mutableMap: MutableMap<String, Int> umwandeln möchte, was wäre der beste Weg das zu tun? Es scheint keinen bequemen Weg zu geben.

    
spierce7 26.07.2016, 15:38
quelle

2 Antworten

8

Kotlin 1.1 stdlib hat eine .toMutableMap() -Funktion. Das sollte jetzt verwendet werden.

Die folgende Erweiterungsfunktion funktioniert, indem Sie Map in ein MutableMap kopieren.

%Vor%     
spierce7 26.07.2016, 16:26
quelle
9

Erstens, wie in früheren Fragen über Kotlin-Read-Only-Sammlungen und ihre Unveränderlichkeit behandelt, sind sie wirklich nur Live-Ansichten von wahrscheinlich veränderlichen Sammlungen gelesen.

Kotlin kann den Typ sicher auf Mutabilität prüfen, da es Marker auf den Schnittstellen gibt, die Kotlin wissen lassen, zum Beispiel:

%Vor%

Dieser is Check ruft intern TypeIntrinsics.isMutableMap auf und ist ein gültiger Weg, um zu wissen, ob es umsetzbar ist. Es besteht keine Gefahr in der Besetzung, wenn Sie diese Prüfung zuerst durchführen. Sie werden bemerken, dass der Compiler vollkommen glücklich und ohne Warnungen ist. Dies kann gefährlich sein, wenn Sie nicht beabsichtigen, die gleiche Map als schreibgeschützt zu bearbeiten, sondern dass Sie für act sprechen können.

Wenn Sie nicht die Möglichkeit haben möchten, Ihre ursprüngliche Karte zu ändern, dann machen Sie natürlich immer eine Kopie, indem Sie einfach den Konstruktor von HashMap mit einer anderen Karte aufrufen, HashMap(readOnlyMap) . Oder machen Sie eine Erweiterungsfunktion:

%Vor%

und rufe es an:

%Vor%

Und jetzt haben Sie Ihren einfachen Weg.

Siehe auch:

Jayson Minard 26.07.2016 17:30
quelle

Tags und Links