Muszę zainicjować stałą HashMap i chciałbym to zrobić w jednym wierszu instrukcji. Unikanie czegoś takiego:
hashMap.put("One", new Integer(1)); // adding value into HashMap
hashMap.put("Two", new Integer(2));
hashMap.put("Three", new Integer(3));
podobnie jak w celu C:
[NSDictionary dictionaryWithObjectsAndKeys:
@"w",[NSNumber numberWithInt:1],
@"K",[NSNumber numberWithInt:2],
@"e",[NSNumber numberWithInt:4],
@"z",[NSNumber numberWithInt:5],
@"l",[NSNumber numberWithInt:6],
nil]
Nie znalazłem żadnego przykładu, który pokazuje, jak to zrobić, patrząc na tak wielu.
Możesz użyć ImmutableMap Google Guava. Działa to o ile nie zależy ci na późniejszej modyfikacji mapy (nie możesz wywołać .put () na mapie po skonstruowaniu jej przy użyciu tej metody):
Zobacz też: http://docs.guava-libraries.googlecode.com/git/javadoc/com/google/common/collect/ImmutableMap.html
Dość powiązane pytanie: obejście ImmutableMap.of () dla HashMap w Mapach?
źródło
ImmutableMap
jeśli nie akceptujesznull
kluczy ani wartości.Od wersji Java 9 można używać
Map.of(...)
, na przykład:Ta mapa jest niezmienna. Jeśli chcesz, aby mapa była zmienna, musisz dodać:
Jeśli nie możesz użyć Javy 9, utkniesz w pisaniu podobnej metody pomocniczej samodzielnie lub korzystaniu z biblioteki innej firmy (takiej jak Guava ), aby dodać tę funkcjonalność za Ciebie.
źródło
Map.of
zrobisz tylko do 10 wpisów, ponieważ jest to dość pracochłonneJava nie ma literału mapy, więc nie ma dobrego sposobu na zrobienie dokładnie tego, o co prosisz.
Jeśli potrzebujesz tego typu składni, rozważ Groovy, który jest kompatybilny z Javą i pozwala ci:
źródło
Mapy mają również dodane metody fabryczne w Javie 9. Dla maksymalnie 10 wpisów Mapy mają przeciążone konstruktory, które pobierają pary kluczy i wartości. Na przykład moglibyśmy zbudować mapę różnych miast i ich populacji (według Google w październiku 2016) w następujący sposób:
Przypadek var-args dla Map jest nieco trudniejszy, musisz mieć zarówno klucze, jak i wartości, ale w Javie metody nie mogą mieć dwóch parametrów var-args. Tak więc ogólny przypadek jest obsługiwany przez przyjęcie metody var-args
Map.Entry<K, V>
obiektów i dodanie statycznejentry()
metody, która je konstruuje. Na przykład:Collection Factory Methods w Javie 9
źródło
Oto prosta klasa, która spełni Twoje oczekiwania
A potem go użyć
To daje
{a:1, b:2}
źródło
Ignorując deklarację
x
(która jest niezbędna, aby uniknąć diagnostyki „nieosiągalnej instrukcji”), technicznie jest to tylko jedna instrukcja.źródło
Możesz dodać tę funkcję narzędziową do klasy narzędziowej:
Uwaga: w
Java 9
możesz użyć Map.ofźródło
Innym podejściem może być napisanie specjalnej funkcji, która wyodrębni wszystkie wartości elementów z jednego ciągu za pomocą wyrażenia regularnego:
źródło