Leider Sammlung Literale waren proposal for Project Coin in Java 7 (und Java 8), aber machte es nie in das Endprodukt, auch bekannt als es kein Feature von Java ist.
Der Satz war
Here’s how it would look with map literals:
final Map<Integer, String> platonicSolids = {
4 : "tetrahedron",
6 : "cube",
8 : "octahedron",
12 : "dodecahedron",
20 : "icosahedron"
};
Here is the empty map literal, which has a slightly irregular syntax to make
it differ from the empty set:
Map<String, Integer> noJokeHere = { : };
aber es ist nie passiert, so dass leider nicht funktioniert. Also, es sei denn, Sie schreiben Ihren eigenen Zauberer oder lambda wie on this site of Per-Åke Minborg, Sie sind auf sich allein gestellt. Folgendes von der Seite sollte allerdings funktionieren (in Java 8).
//copy paste from linked site
Map<Integer, String> map = Stream.of(
new SimpleEntry<>(0, "zero"),
new SimpleEntry<>(1, "one"),
//...
new SimpleEntry<>(11, "eleven"),
new SimpleEntry<>(12, "twelve"))
.collect(Collectors.toMap((e) -> e.getKey(), (e) -> e.getValue()));
Und das vereinfachte Version, die auch von der site:
//copy paste from linked site
public static <K, V> Map.Entry<K, V> entry(K key, V value) {
return new AbstractMap.SimpleEntry<>(key, value);
}
public static <K, U> Collector<Map.Entry<K, U>, ?, Map<K, U>> entriesToMap() {
return Collectors.toMap((e) -> e.getKey(), (e) -> e.getValue());
}
Map<Integer, String> map = Stream.of(
entry(0, "zero"),
//...
entry(12, "twelve"))
.collect(entriesToMap());
Sammlung Literale wurden nicht wegen these points eingeführt:
Der "einfache" Version dieses Features (Sätze, Listen, Karten nur) ist nicht sehr befriedigend oder populär; die "erweiterbare" Version dieses Features ist offen, unordentlich und praktisch garantiert, um seine Konstruktion zu übertreffen Budget;
Die Bibliothek-basierte Version gibt uns X% des Nutzens für 1% der Kosten, wobei X >> 1;
Werttypen kommen, und die in einer Welt mit Werttypen „was wie diese Funktion aussehen würde“ kann gut sein, ganz anders als in einer Welt ohne, was darauf hindeutet, es fraglich wäre, diese Arbeit zu versuchen und zu tun vor Werttypen;
Wir sind besser dran, unsere Sprache-Design Bandbreite auf Fokussierung mehr die grundlegenden Fragen Adressierung eine bibliotheksbasierten Version zugrunde liegen (zB: effizienter varargs, Array-Konstanten in dem konstanten Pool, unveränderliche Arrays und Unterstützung für Caching (und Rückgewinnung von unter Druck) zwischen unveränderlichen Ergebnissen).
By Brian Goetz from Oracle
Idk wenn Java8 einige neue Tricks hat oder nicht. Aber [diese] (http://stackoverflow.com/questions/507602/how-can-i-initial-ize-astatic-map) Frage wurde vor ein paar Jahren gestellt und der Konsens war nein. Siehe auch [dies] (http://stackoverflow.com/questions/6802483/how-to-directly-initialize-a-hashmap-in-a-literal-way) – chancea
Sie können nicht so ... Aber Sie können fügen Sie eine weitere Karte hinzu, indem Sie putAll verwenden (Map (K, v)); –
Ich frage mich, ob es von Anfang an zugänglich ist, warum verwenden Sie 'enums' nicht, oder wenn Sie keine Duplizierung für Schlüssel und Wert mögen, warum ist es dann nicht' Set', oder Sie können 'MyHashMap erstellen 'wo Sie definieren 'Put (Object o)' – CsBalazsHungary