Jaki jest najlepszy sposób na konwersję Map<key,value>
na a List<value>
? Wystarczy powtórzyć wszystkie wartości i wstawić je do listy, czy coś przeoczyłem?
java
list
collections
map
Javaa
źródło
źródło
Odpowiedzi:
zarozumiały:
źródło
Collection
doList
zadziała.keySet()
ivalues()
są ogólnie shim obiektami, które dają widok zestawu lub kolekcji podstawowej struktury (keySet()
zwraca zestaw, aby podkreślić brak duplikatów). Bovalues()
zwrócony obiekt może byćList
, ale często nie będzie. Tworzenie prawdziwej listy, jak mówisz, przerywa link, co oznacza, że nie jesteś już zależny od oryginalnej mapy. Czasami jednak potrzebujesz tylko Listy, ponieważ niektóre API jej wymagają - wzmacniając zasadę, że dobry API powinien wymagać tylko najbardziej abstrakcyjnych interfejsów, zProblem polega na tym, że
Map
ma dwie wartości (klucz i wartość), podczas gdyList
tylko jedna ma wartość (element).Dlatego najlepsze, co można zrobić, to uzyskać jeden
List
z kluczy lub wartości. (Chyba że stworzymy opakowanie, aby utrzymać parę klucz / wartość).Powiedzmy, że mamy
Map
:Klucze jako
List
można uzyskać, tworząc nowyArrayList
zeSet
zwracanego przezMap.keySet
metodę:Podczas gdy wartości jako
List
można uzyskać, tworząc nowyArrayList
zeCollection
zwracanego przezMap.values
metodę:Wynik uzyskania
List
kluczy:Wynik uzyskania
List
wartości:źródło
HashMap
podobnych nieposortowanychMap
implementacji będzie ona skutecznie losowa.Korzystanie z interfejsu API strumieni Java 8.
źródło
map.entrySet()
daje kolekcjęMap.Entry
obiektów zawierających zarówno klucz, jak i wartość. możesz następnie przekształcić to w dowolny obiekt kolekcji, taki jaknew ArrayList(map.entrySet())
;źródło
lista czego?
Zakładając, że
map
masz instancjęMap
map.values()
zwróci wartośćCollection
zawierającą wszystkie wartości mapy.map.keySet()
zwróciSet
zawierające wszystkie klucze mapy.źródło
Chyba chcesz przekonwertować wartości zawartych w
Map
Dolist
? Najłatwiej jest wywołaćvalues()
metodęMap
interfejsu. Zwróci toCollection
wartości obiektów zawartych wMap
.Zauważ, że
Collection
jest to wspierane przezMap
obiekt, a wszelkie zmiany wMap
obiekcie odzwierciedlą się tutaj. Jeśli więc chcesz, aby oddzielna kopia nie była związana z TwoimMap
obiektem, po prostu utwórz nowyList
obiekt, na przykładArrayList
przekazując wartość,Collection
jak poniżej.źródło
Możesz to zrobić w ten sposób
źródło
Jeśli chcesz się upewnić, że wartości w wynikowym
List<Value>
są w kolejności wprowadzania danych wejściowychMap<Key, Value>
, musiszSortedMap
jakoś „przejść przez” .Albo zacząć z konkretną
SortedMap
realizację (npTreeMap
) lub włóż wkładMap
doSortedMap
przed konwersją, że doList
. na przykład:W przeciwnym razie otrzymasz dowolną natywną kolejność, jaką
Map
zapewnia implementacja, która często może być czymś innym niż naturalna kolejność kluczy (spróbujHashtable
lubConcurrentHashMap
, dla odmiany).źródło
możemy mieć parę kluczy i wartości na liście. Możemy również uzyskać klucz i wartość za pomocą Map.Entry poprzez iterację po liście.
źródło
źródło
źródło
Oto ogólna metoda uzyskiwania wartości z mapy.
źródło
źródło