Ich mag neues Element erstellen , die in ähnlicher Weise zu , Util.Map.Entry
dass die Struktur enthalten werden key
, value
.
Das Problem ist, dass ich a nicht instanziieren kann, Map.Entry
weil es eine Schnittstelle ist.
Weiß jemand, wie man ein neues generisches Schlüssel- / Wertobjekt für Map.Entry erstellt?
java
dictionary
collections
key-value
Spider Man
quelle
quelle
Es gibt
public static class AbstractMap.SimpleEntry<K,V>
. Lassen Sie sich nicht derAbstract
Teil des Namens Sie täuschen: es ist in der Tat nicht eineabstract
Klasse (aber in der obersten EbeneAbstractMap
ist).Die Tatsache, dass es sich um eine
static
verschachtelte Klasse handelt, bedeutet, dass Sie KEINE umschließendeAbstractMap
Instanz benötigen , um sie zu instanziieren. So etwas lässt sich also gut kompilieren:Wie in einer anderen Antwort erwähnt, verfügt Guava auch über eine praktische
static
Factory-MethodeMaps.immutableEntry
, die Sie verwenden können.Du sagtest:
Das ist nicht ganz richtig. Der Grund, warum Sie es nicht direkt instanziieren können (dh mit
new
), ist, dass es ein istinterface Map.Entry
.Vorbehalt und Trinkgeld
Wie in der Dokumentation angegeben,
AbstractMap.SimpleEntry
steht@since 1.6
es Ihnen also nicht zur Verfügung, wenn Sie sich an 5.0 halten.Um nach einer anderen bekannten Klasse zu suchen,
implements Map.Entry
können Sie tatsächlich direkt zum Javadoc gehen. Ab der Java 6 VersionLeider listet die Version 1.5 keine bekannte Implementierungsklasse auf, die Sie verwenden können, sodass Sie möglicherweise nicht in der Lage sind, Ihre eigene zu implementieren.
quelle
AbstractMap.SimpleEntry
es bis Java 6 nicht öffentlich war, wie Sie in der Dokumentation sehen können.AbstractMap.SimpleEntry
. Ich denke du lernst jeden Tag etwas Neues!Ab Java 9 gibt es eine neue Dienstprogrammmethode, mit der ein unveränderlicher Eintrag erstellt werden kann
Map#entry(Object, Object)
.Hier ist ein einfaches Beispiel:
Da es unveränderlich ist,
setValue
wird ein Anruf ein werfenUnsupportedOperationException
. Die anderen Einschränkungen sind die Tatsache, dass es nicht serialisierbar ist undnull
als Schlüssel oder Wert verboten ist. Wenn es für Sie nicht akzeptabel ist, müssen SieAbstractMap.SimpleImmutableEntry
oderAbstractMap.SimpleEntry
stattdessen verwenden.NB: Wenn Sie direkt ein
Map
Paar mit 0 bis bis zu 10 (Schlüssel, Wert) Paaren erstellen möchten, können Sie stattdessen die Typmethoden verwendenMap.of(K key1, V value1, ...)
.quelle
Versuchen Sie Maps.immutableEntry von Guava
Dies hat den Vorteil, dass es mit Java 5 kompatibel ist (im Gegensatz zu
AbstractMap.SimpleEntry
Java 6).quelle
Beispiel für AbstractMap.SimpleEntry:
Instanziieren:
Zeilen hinzufügen:
Zeilen abrufen:
Sollte drucken:
Es ist gut zum Definieren von Kanten von Diagrammstrukturen. Wie die zwischen Neuronen in deinem Kopf.
quelle
Sie könnten tatsächlich gehen mit:
Map.Entry<String, String> en= Maps.immutableEntry(key, value);
quelle
Warum
Map.Entry
? Ich denke, so etwas wie ein Schlüssel-Wert-Paar ist für den Fall geeignet.Verwenden Sie
java.util.AbstractMap.SimpleImmutableEntry
oderjava.util.AbstractMap.SimpleEntry
quelle
org.apache.commons.lang3.tuple.Pair
implementiertjava.util.Map.Entry
und kann auch eigenständig verwendet werden.Auch wie andere erwähnt haben Guavas
com.google.common.collect.Maps.immutableEntry(K, V)
den Trick.Ich bevorzuge
Pair
für seine fließendePair.of(L, R)
Syntax.quelle
ImmutablePair
stattdessen vorschlagen ?Ich habe eine generische Pair-Klasse definiert, die ich ständig verwende. Es ist toll. Als Bonus muss ich durch die Definition einer statischen Factory-Methode (Pair.create) die Typargumente nur halb so oft schreiben.
quelle
Pair
Implementierungen eine schlechte Sache sind. QuelleWenn Sie Clojure verwenden, haben Sie eine andere Option:
quelle