Dlaczego Guava nie zapewnia sposobu na przekształcenie klawiszy mapy

To pytanie jest już opublikowane tutaj:Jak przekonwertować Map <String, String> na Mapę <Long, String> używając guava

Myślę, że odpowiedź CollinD jest właściwa:

Wszystkie metody Guawy do transformacji i filtrowania dają leniwe wyniki ... funkcja / predykat jest stosowana tylko wtedy, gdy jest potrzebny, gdy obiekt jest używany. Nie tworzą kopii. Z tego powodu transformacja może łatwo złamać wymagania aSet.

Powiedzmy na przykład, że maszMap<String, String> który zawiera zarówno „1”, jak i „01” jako klucze. Oba są odrębneStrings, i takMap może legalnie zawierać oba klucze. Jeśli je przetransformujeszLong.valueOf(String)jednak oba odwzorowują wartość1. Nie są już odrębnymi kluczami. To nic nie zepsuje, jeśli utworzysz kopię mapy i dodasz wpisy, ponieważ wszelkie powielone klucze zastąpią poprzedni wpis dla tego klucza. Leniwie przemienionyMapnie miałby jednak możliwości egzekwowania unikalnych kluczy, a zatem złamałby umowę zMap.

To prawda, ale tak naprawdę nie rozumiem, dlaczego tak się nie dzieje, ponieważ:

Gdy nastąpi transformacja klucza, jeśli 2 klucze są „scalone”, może zostać wygenerowany wyjątek czasu wykonywania lub możemy przekazać flagę wskazującą Guava, aby wziął dowolną wartość wielu możliwych wartości nowo obliczonego klucza (możliwości awaryjnego / bezpiecznego) )

Możemy mieć Maps.transformKeys, który tworzy Multimap

Czy jest jakaś wada, której nie widzę w robieniu takich rzeczy?

questionAnswers(1)

yourAnswerToTheQuestion