Me gustaría crear un nuevo elemento que de igual forma a Util.Map.Entry
que contendrá la estructura key
, value
.
El problema es que no puedo crear una instancia Map.Entry
porque es una interfaz.
¿Alguien sabe cómo crear un nuevo objeto clave / valor genérico para Map.Entry?
java
dictionary
collections
key-value
hombre araña
fuente
fuente
Hay
public static class AbstractMap.SimpleEntry<K,V>
. No permita que laAbstract
parte del nombre lo engañe: de hecho, NO es unaabstract
clase (pero su nivel superior sí loAbstractMap
es).El hecho de que sea una
static
clase anidada significa que NO necesita unaAbstractMap
instancia de cierre para crear una instancia, por lo que algo como esto se compila bien:Como se señaló en otra respuesta, Guava también tiene un
static
método de fábrica convenienteMaps.immutableEntry
que puede usar.Tu dijiste:
Eso no es del todo exacto. La razón por la que no puede crear una instancia directamente (es decir, con
new
) es porque es uninterface Map.Entry
.Advertencia y propina
Como se señala en la documentación,
AbstractMap.SimpleEntry
es decir@since 1.6
, si está atascado en 5.0, entonces no está disponible para usted.Para buscar otra clase conocida que
implements Map.Entry
, de hecho, puede ir directamente al javadoc. Desde la versión Java 6Lamentablemente, la versión 1.5 no enumera ninguna clase de implementación conocida que pueda usar, por lo que es posible que no haya implementado la suya propia.
fuente
AbstractMap.SimpleEntry
no era público hasta Java 6, como puede ver en la documentación.AbstractMap.SimpleEntry
. ¡Supongo que aprendes algo nuevo todos los días!A partir de Java 9, hay un nuevo método de utilidad que permite crear una entrada inmutable que es
Map#entry(Object, Object)
.Aquí hay un ejemplo simple:
Como es inmutable, llamar
setValue
arrojará unUnsupportedOperationException
. Las otras limitaciones son el hecho de que no es serializable y,null
como la clave o el valor están prohibidos, si no es aceptable para usted, deberá usarloAbstractMap.SimpleImmutableEntry
o, en suAbstractMap.SimpleEntry
lugar.NB: si su necesidad es crear directamente a
Map
con 0 a hasta 10 pares (clave, valor), puede utilizar los métodos de tipoMap.of(K key1, V value1, ...)
.fuente
Prueba Maps.immutableEntry desde Guava
Esto tiene la ventaja de ser compatible con Java 5 (a diferencia de lo
AbstractMap.SimpleEntry
que requiere Java 6.)fuente
Ejemplo de AbstractMap.SimpleEntry:
Instanciar:
Agregar filas:
Obtener filas:
Debería imprimir:
Es bueno para definir aristas de estructuras gráficas. Como las que hay entre las neuronas en tu cabeza.
fuente
Realmente podrías ir con:
Map.Entry<String, String> en= Maps.immutableEntry(key, value);
fuente
¿Por qué
Map.Entry
? Supongo que algo así como un par clave-valor es adecuado para el caso.Use
java.util.AbstractMap.SimpleImmutableEntry
ojava.util.AbstractMap.SimpleEntry
fuente
org.apache.commons.lang3.tuple.Pair
implementajava.util.Map.Entry
y también se puede utilizar de forma independiente.También como otros mencionaron, Guava's
com.google.common.collect.Maps.immutableEntry(K, V)
hace el truco.Prefiero
Pair
por suPair.of(L, R)
sintaxis fluida .fuente
ImmutablePair
lugar?Definí una clase de par genérico que uso todo el tiempo. Es genial. Como beneficio adicional, al definir un método de fábrica estático (Pair.create) solo tengo que escribir los argumentos de tipo la mitad de las veces.
fuente
Pair
implementaciones son malas. FuenteSi está utilizando Clojure, tiene otra opción:
fuente