To pytanie jest rodzajem już zamieszczonych tutaj: How to convert Map<String, String> to Map<Long, String> using guavaDlaczego Guava nie zapewnia drogę do przekształcenia klucze mapę
Myślę, że odpowiedź od CollinD jest właściwe:
Wszystko metod guawy za przekształcenie i filtrowanie dają leniwe wyniki ... funkcja/predykat jest stosowany tylko wtedy, gdy jest potrzebny, ponieważ używany jest obiekt . Nie tworzą kopii. Z tego powodu transformacja może z łatwością złamać wymagania dla
Set
.Załóżmy na przykład, że masz
Map<String, String>
, który zawiera "1" i "01" jako klucze. Oba są odrębneString
s, a zatemMap
może legalnie zawierać oba klucze. Jeśli jednak przekształcisz je za pomocąLong.valueOf(String)
, oba odwzorują na wartość1
. Są to już nie różne klucze. Nie spowoduje to żadnego uszkodzenia, jeśli użytkownik utworzy kopię mapy i doda wpisy, ponieważ każdy zduplikowany klucz nadpisze poprzedni wpis dla tego klucza. Jednakże, nie ma możliwości wymuszenia unikatowych kluczy , a zatem złamałby umowę zMap
.
To prawda, ale w rzeczywistości nie rozumiem, dlaczego to nie jest wykonywana, ponieważ:
Gdy klucz transformacja zdarzyć, jeśli 2 klucze są „połączone” wyjątek środowiska wykonawczego może być podniesiony, czy moglibyśmy przejść flagę, aby wskazać Guava aby przyjąć dowolną wartość z wielu możliwych wartości nowo obliczoną klawisz (failfast/Failsafe możliwości!)
my może mieć Maps.transformKeys który wytwarza Multimap
Czy jest coś, czego nie widzę w robieniu takich rzeczy?
Wydaje się być bardziej odpowiednie dla programistów.stackexchange.com –