Je voudrais créer un nouvel élément qui, comme Util.Map.Entry
celui-ci, contiendra la structure key
,value
.
Le problème est que je ne peux pas instancier un Map.Entry
car c'est une interface.
Quelqu'un sait-il comment créer un nouvel objet clé / valeur générique pour Map.Entry?
java
dictionary
collections
key-value
Homme araignée
la source
la source
Voilà
public static class AbstractMap.SimpleEntry<K,V>
. Ne laissez pas laAbstract
partie du nom vous induire en erreur: ce n'est en fait PAS uneabstract
classe (mais son niveau supérieurAbstractMap
est).Le fait qu'il s'agisse d'une
static
classe imbriquée signifie que vous N'AVEZ PAS besoin d'uneAbstractMap
instance englobante pour l'instancier, donc quelque chose comme ça se compile bien:Comme indiqué dans une autre réponse, Guava a également une
static
méthode d'usine pratiqueMaps.immutableEntry
que vous pouvez utiliser.Tu as dit:
Ce n'est pas tout à fait exact. La raison pour laquelle vous ne pouvez pas l'instancier directement (c'est-à-dire avec
new
) est que c'est uninterface Map.Entry
.Avertissement et conseil
Comme il est indiqué dans la documentation,
AbstractMap.SimpleEntry
est@since 1.6
, donc si vous êtes bloqué sur 5.0, alors il n'est pas disponible pour vous.Pour rechercher une autre classe connue qui
implements Map.Entry
, vous pouvez en fait aller directement au javadoc. Depuis la version Java 6Malheureusement, la version 1.5 ne répertorie aucune classe d'implémentation connue que vous pouvez utiliser, vous pouvez donc être bloqué par l'implémentation de la vôtre.
la source
AbstractMap.SimpleEntry
n'était pas public avant Java 6, comme vous pouvez le voir dans la documentation.AbstractMap.SimpleEntry
. Je suppose que vous apprenez quelque chose de nouveau chaque jour!A partir de Java 9, il existe une nouvelle méthode utilitaire permettant de créer une entrée immuable qui l'est
Map#entry(Object, Object)
.Voici un exemple simple:
Comme il est immuable, l'appel
setValue
lancera unUnsupportedOperationException
. Les autres limitations sont le fait qu'il n'est pas sérialisable etnull
que la clé ou la valeur est interdite, si elle n'est pas acceptable pour vous, vous devrez utiliserAbstractMap.SimpleImmutableEntry
ou à laAbstractMap.SimpleEntry
place.NB: Si votre besoin est de créer directement un
Map
avec 0 à 10 paires (clé, valeur), vous pouvez utiliser à la place les méthodes de typeMap.of(K key1, V value1, ...)
.la source
Essayez Maps.immutableEntry from Guava
Cela a l'avantage d'être compatible avec Java 5 (contrairement à
AbstractMap.SimpleEntry
ce qui nécessite Java 6.)la source
Exemple de AbstractMap.SimpleEntry:
Instancier:
Ajouter des lignes:
Récupérer les lignes:
Devrait imprimer:
C'est bon pour définir les bords des structures de graphe. Comme ceux entre les neurones de votre tête.
la source
Vous pourriez en fait aller avec:
Map.Entry<String, String> en= Maps.immutableEntry(key, value);
la source
Pourquoi
Map.Entry
? Je suppose que quelque chose comme une paire clé-valeur convient à l'affaire.Utilisez
java.util.AbstractMap.SimpleImmutableEntry
oujava.util.AbstractMap.SimpleEntry
la source
org.apache.commons.lang3.tuple.Pair
met en oeuvrejava.util.Map.Entry
et peut également être utilisé de manière autonome.Aussi, comme d'autres l'ont mentionné, la goyave
com.google.common.collect.Maps.immutableEntry(K, V)
fait l'affaire.Je préfère
Pair
saPair.of(L, R)
syntaxe fluide .la source
ImmutablePair
place?J'ai défini une classe Pair générique que j'utilise tout le temps. C'est bien. En prime, en définissant une méthode d'usine statique (Pair.create), je n'ai qu'à écrire les arguments de type deux fois moins souvent.
la source
Pair
implémentations sont une mauvaise chose. SourceSi vous utilisez Clojure, vous avez une autre option:
la source