Ich muss eine konstante HashMap initialisieren und möchte dies in einer einzeiligen Anweisung tun. So etwas vermeiden:
hashMap.put("One", new Integer(1)); // adding value into HashMap
hashMap.put("Two", new Integer(2));
hashMap.put("Three", new Integer(3));
ähnlich wie in Ziel C:
[NSDictionary dictionaryWithObjectsAndKeys:
@"w",[NSNumber numberWithInt:1],
@"K",[NSNumber numberWithInt:2],
@"e",[NSNumber numberWithInt:4],
@"z",[NSNumber numberWithInt:5],
@"l",[NSNumber numberWithInt:6],
nil]
Ich habe kein Beispiel gefunden, das zeigt, wie man das macht, nachdem ich so viele angeschaut habe.
Sie können die ImmutableMap von Google Guava verwenden. Dies funktioniert so lange, wie Sie die Karte später nicht mehr ändern möchten (Sie können .put () auf der Karte nicht aufrufen, nachdem Sie sie mit dieser Methode erstellt haben):
Siehe auch: http://docs.guava-libraries.googlecode.com/git/javadoc/com/google/common/collect/ImmutableMap.html
Eine etwas verwandte Frage: Problemumgehung von ImmutableMap.of () für HashMap in Maps?
quelle
ImmutableMap
keinenull
Schlüssel oder Werte akzeptiert werden.Seit Java 9 ist es möglich
Map.of(...)
, wie folgt zu verwenden :Diese Karte ist unveränderlich. Wenn die Karte veränderbar sein soll, müssen Sie Folgendes hinzufügen:
Wenn Sie Java 9 nicht verwenden können, müssen Sie selbst eine ähnliche Hilfsmethode schreiben oder eine Bibliothek eines Drittanbieters (wie Guava ) verwenden, um diese Funktionalität für Sie hinzuzufügen.
quelle
Map.of
nur bis zu 10 Einträge gemacht, da es ziemlich mühsam istJava hat kein Kartenliteral, daher gibt es keine gute Möglichkeit, genau das zu tun, was Sie verlangen.
Wenn Sie diese Art von Syntax benötigen, sollten Sie Groovy in Betracht ziehen, das Java-kompatibel ist und Folgendes ermöglicht:
quelle
In Maps wurden auch Factory-Methoden in Java 9 hinzugefügt. Für bis zu 10 Einträge haben Maps Konstruktoren überladen, die Schlüssel- und Wertepaare annehmen. Zum Beispiel könnten wir eine Karte verschiedener Städte und ihrer Bevölkerung (laut Google im Oktober 2016) wie folgt erstellen:
Der var-args-Fall für Map ist etwas schwieriger. Sie müssen sowohl Schlüssel als auch Werte haben, aber in Java können Methoden nicht zwei var-args-Parameter haben. Der allgemeine Fall wird also behandelt, indem eine var-args-Methode für
Map.Entry<K, V>
Objekte verwendet und eine statischeentry()
Methode hinzugefügt wird, die sie erstellt. Beispielsweise:Collection Factory-Methoden in Java 9
quelle
Hier ist eine einfache Klasse, die das erreicht, was Sie wollen
Und dann, um es zu benutzen
Dies ergibt
{a:1, b:2}
quelle
Wenn man die Deklaration von ignoriert
x
(was notwendig ist, um eine Diagnose "nicht erreichbare Aussage" zu vermeiden), ist es technisch gesehen nur eine Aussage.quelle
Sie können diese Dienstprogrammfunktion einer Dienstprogrammklasse hinzufügen:
Hinweis: In können
Java 9
Sie Map.of verwendenquelle
Ein anderer Ansatz könnte darin bestehen, eine spezielle Funktion zu schreiben, um alle Elementwerte aus einer Zeichenfolge durch einen regulären Ausdruck zu extrahieren:
quelle