Warum bietet Guava keine Möglichkeit, Kartenschlüssel zu transformieren?

Diese Frage wurde hier bereits gestellt:So konvertieren Sie Map <String, String> mit Guave in Map <Long, String>

Ich halte die Antwort von CollinD für angemessen:

Alle Methoden von Guava zum Transformieren und Filtern führen zu schleppenden Ergebnissen. Die Funktion / das Prädikat wird nur angewendet, wenn es für die Verwendung des Objekts benötigt wird. Sie erstellen keine Kopien. Aufgrund dessen kann eine Transformation jedoch leicht die Anforderungen von a brechenSet.

Nehmen wir zum Beispiel an, Sie haben eineMap<String, String> das enthält beide "1" und "01" als Schlüssel. Sie sind beide verschiedenStrings und so dieMap kann legal beide als Schlüssel enthalten. Wenn Sie sie mit transformierenLong.valueOf(String)Beide werden jedoch dem Wert zugeordnet1. Sie sind keine unterschiedlichen Schlüssel mehr. Wenn Sie eine Kopie der Karte erstellen und die Einträge hinzufügen, wird dies nichts ändern, da doppelte Schlüssel den vorherigen Eintrag für diesen Schlüssel überschreiben. Ein faul verwandeltMapEs hätte jedoch keine Möglichkeit, eindeutige Schlüssel durchzusetzen, und würde daher den Vertrag von a. brechenMap.

Das ist wahr, aber ich verstehe nicht, warum es nicht gemacht wird, weil:

Wenn die Schlüsselumwandlung stattfindet und 2 Schlüssel "zusammengeführt" werden, kann eine Laufzeitausnahme ausgelöst werden, oder es kann ein Flag übergeben werden, um Guava anzuzeigen, dass ein beliebiger Wert aus den mehreren möglichen Werten für den neu berechneten Schlüssel übernommen werden soll (Failfast / FailSafe-Möglichkeiten) )

Wir könnten Maps.transformKeys haben, die eine Multimap erzeugen

Gibt es einen Nachteil, den ich bei solchen Dingen nicht sehe?

Antworten auf die Frage(1)

Ihre Antwort auf die Frage