¿Cuál es la mejor manera de convertir Map<key,value>
a a List<value>
? Simplemente repita todos los valores e insértelos en una lista o ¿estoy pasando por alto algo?
java
list
collections
map
Javaa
fuente
fuente
Respuestas:
asumiendo:
fuente
Collection
aList
funcionaría.keySet()
yvalues()
generalmente son objetos de ajuste que proporcionan una vista de conjunto o colección de la estructura subyacente (keySet()
devuelve un conjunto para enfatizar que no hay engaños). Paravalues()
, el objeto devuelto puede ser unList
, pero a menudo no lo será. La creación de una Lista real, como usted dice, rompe el enlace, lo que significa que ya no depende del Mapa original. A veces sin embargo, sólo se necesita una lista debido a que algunos API requiere uno - el refuerzo de la regla de que una buena API debe requerir sólo las interfaces más abstractas que puede salirse con la suya ...El problema aquí es que
Map
tiene dos valores (una clave y un valor), mientras que unList
solo tiene un valor (un elemento).Por lo tanto, lo mejor que se puede hacer es obtener una
List
de las claves o los valores. (A menos que hagamos un contenedor para mantener el par clave / valor).Digamos que tenemos un
Map
:Las claves como a
List
se pueden obtener creando una nueva aArrayList
partir de unaSet
devuelta por elMap.keySet
método:Si bien los valores como a
List
se pueden obtener creando uno nuevo aArrayList
partir de un métodoCollection
devueltoMap.values
:El resultado de obtener las
List
claves:El resultado de obtener los
List
valores de:fuente
HashMap
clasificadas similaresMap
será efectivamente aleatorio.Usando la API de Java 8 Streams.
fuente
map.entrySet()
le ofrece una colección deMap.Entry
objetos que contienen clave y valor. luego puede transformar esto en cualquier objeto de colección que desee, comonew ArrayList(map.entrySet())
;fuente
una lista de que?
Asumiendo que
map
es tu instancia deMap
map.values()
devolverá un queCollection
contiene todos los valores del mapa.map.keySet()
devolverá un queSet
contenga todas las claves del mapa.fuente
Supongo que quieres convertir los valores contenidos en el
Map
alist
? Lo más fácil es llamar alvalues()
método de laMap
interfaz. Esto devolverá losCollection
objetos de valor contenidos en elMap
.Tenga en cuenta que esto
Collection
está respaldado por elMap
objeto y cualquier cambio en elMap
objeto se reflejará aquí. Entonces, si desea una copia separada no vinculada a suMap
objeto, simplemente cree un nuevoList
objeto comoArrayList
pasar el valorCollection
como se muestra a continuación.fuente
Puedes hacerlo así
fuente
Si desea asegurarse de que los valores en la resultante
List<Value>
están en el orden de las claves de la entradaMap<Key, Value>
, debe "ir a través de" deSortedMap
alguna manera.O bien comenzar con una concreta
SortedMap
aplicación (tal comoTreeMap
) o inserte su entradaMap
en unaSortedMap
antes de la conversión que aList
. p.ej:De lo contrario, obtendrá el orden nativo que
Map
proporciona la implementación, que a menudo puede ser algo diferente al orden de las teclas naturales (PruebeHashtable
oConcurrentHashMap
, para variar).fuente
podemos tener pares de clave y valor en la lista. También podemos obtener clave y valor usando Map.Entry iterando sobre la lista.
fuente
fuente
fuente
Aquí está el método genérico para obtener valores del mapa.
fuente
fuente