Mam HashMap
:
private HashMap<TypeKey, TypeValue> example = new HashMap<TypeKey, TypeValue>();
Teraz chciałbym przejrzeć wszystkie wartości i je wydrukować.
Ja to napisałem:
for (TypeValue name : this.example.keySet()) {
System.out.println(name);
}
Wydaje się, że to nie działa.
Jaki jest problem?
EDYCJA: Kolejne pytanie: czy ta kolekcja jest zerowa? Mam na myśli, że jeśli ma 1 klucz i wartość, czy rozmiar będzie wynosił 0 czy 1?
java
collections
Nieznany użytkownik
źródło
źródło
Map
's : „Zwraca liczbę odwzorowań klucz-wartość w tej mapie. Jeśli mapa zawiera więcej niż elementów, funkcja zwraca ”.size()
Integer.MAX_VALUE
Integer.MAX_VALUE
Odpowiedzi:
keySet () zwraca tylko zestaw kluczy z twojego hashmap, powinieneś iterować ten zestaw kluczy i pobrać wartość z hashmap używając tych kluczy.
W twoim przykładzie typ klucza hashmap to
TypeKey
, ale określono goTypeValue
w ogólnej pętli for, więc nie można go skompilować. Powinieneś to zmienić na:Aktualizacja dla Java8:
Jeśli nie musisz drukować wartości klucza i potrzebujesz tylko wartości hashmap, możesz skorzystać z sugestii innych.
Kolekcja zwrócona z
keySet()
jest zestawem . Nie można pobrać wartości z zestawu przy użyciu indeksu, więc nie jest kwestią, czy jest ona oparta na zeru, czy na jedynce. Jeśli twój hashmap ma jeden klucz, zwrócony keySet () będzie miał jeden wpis w środku, a jego rozmiar będzie wynosił 1.źródło
for (Map.Entry<String, String> entry : map.entrySet()) { ... }
example.forEach((key, value) -> System.out.println("key + " | " + value));
Prosty sposób, aby zobaczyć pary klucz-wartość:
Zarówno metoda 1, jak i metoda 2 dają to:
źródło
System.out.println(map);
{b=2, a=1}
System.out.println(map.toString());
.toString
kiedy to możliwe.Zakładając, że masz
Map<KeyType, ValueType>
, możesz wydrukować to w następujący sposób:źródło
Aby wydrukować klucz i wartość, użyj następującego:
źródło
Masz kilka opcji
map.values()
, który pobiera wartości, a nie kluczemap.entrySet()
co ma obakeySet()
i dla każdego połączenia z kluczemmap.get(key)
źródło
Chcesz ustawić wartość, a nie zestaw kluczy:
Kod, który podałeś, nawet się nie skompilował, o czym warto wspomnieć w przyszłych pytaniach - „nie wydaje się działać” jest nieco niejasny!
źródło
Warto wspomnieć o podejściu Java 8, zastosowaniu
BiConsumer
i funkcjach lambda:Zakładając, że
toString
w razie potrzeby zastąpiłeś metodę dwóch typów.źródło
Dla mnie ta prosta jedna linia działała dobrze:
źródło
Prosta instrukcja print z nazwą zmiennej, która zawiera odniesienie do mapy skrótów, zrobiłaby:
To działa, ponieważ
toString()
metoda jest już nadpisana wAbstractMap class
rozszerzeniu oHashMap Class
więcej informacji z dokumentacjiźródło
Nowy
forEach
styl funkcji Java 8źródło
Zrobiłem to przy użyciu mapy ciągów (jeśli pracujesz z mapą ciągów).
źródło
Korzystanie z funkcji Java 8
źródło
Przydatne do szybkiego drukowania wpisów w HashMap
źródło
Jeśli mapa zawiera kolekcję jako wartość, inne odpowiedzi wymagają dodatkowego wysiłku, aby przekonwertować je na ciągi, takie jak
Arrays.deepToString(value.toArray())
(jeśli jest to mapa wartości list) itp.Dość często miałem do czynienia z tymi problemami i natrafiłem na ogólną funkcję drukowania wszystkich obiektów za pomocą
ObjectMappers
. Jest to bardzo przydatne we wszystkich miejscach, zwłaszcza podczas eksperymentowania, i radziłbym wybrać ten sposób.źródło
Możesz użyć
Entry
klasy, abyHashMap
łatwo czytać .źródło