Me gustaría crear un nuevo elemento que de igual forma a Util.Map.Entryque contendrá la estructura key, value.
El problema es que no puedo crear una instancia Map.Entryporque 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 laAbstractparte del nombre lo engañe: de hecho, NO es unaabstractclase (pero su nivel superior sí loAbstractMapes).El hecho de que sea una
staticclase anidada significa que NO necesita unaAbstractMapinstancia 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
staticmétodo de fábrica convenienteMaps.immutableEntryque 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.SimpleEntryes 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.SimpleEntryno 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
setValuearrojará unUnsupportedOperationException. Las otras limitaciones son el hecho de que no es serializable y,nullcomo la clave o el valor están prohibidos, si no es aceptable para usted, deberá usarloAbstractMap.SimpleImmutableEntryo, en suAbstractMap.SimpleEntrylugar.NB: si su necesidad es crear directamente a
Mapcon 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.SimpleEntryque 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.SimpleImmutableEntryojava.util.AbstractMap.SimpleEntryfuente
org.apache.commons.lang3.tuple.Pairimplementajava.util.Map.Entryy 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
Pairpor suPair.of(L, R)sintaxis fluida .fuente
ImmutablePairlugar?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
Pairimplementaciones son malas. FuenteSi está utilizando Clojure, tiene otra opción:
fuente