Pregunta

¿Cuál es la mejor manera de convertir un Map<key,value> a un List<value>?Sólo iterar sobre todos los valores y los inserta en una lista o estoy con vistas a algo?

¿Fue útil?

Solución

List<Value> list = new ArrayList<Value>(map.values());

suponiendo:

Map<Key,Value> map;

Otros consejos

El problema aquí es que Map tiene dos valores (una clave y un valor), mientras que a List solo tiene un valor (un elemento).

Por lo tanto, lo mejor que se puede hacer es obtener un ArrayList de las claves o los valores. (A menos que hagamos un contenedor para mantener el par clave / valor).

Digamos que tenemos un Set:

Map<String, String> m = new HashMap<String, String>();
m.put("Hello", "World");
m.put("Apple", "3.14");
m.put("Another", "Element");

Las claves como Map.keySet se pueden obtener creando un nuevo Collection de un Map.values devuelto por <=> método:

List<String> list = new ArrayList<String>(m.keySet());

Si bien los valores como <=> se pueden obtener creando un nuevo <=> a partir de un <=> devuelto por <=> método:

List<String> list = new ArrayList<String>(m.values());

El resultado de obtener la <=> clave:

Apple
Another
Hello

El resultado de obtener el <=> de los valores:

3.14
Element
World

Uso de la API de Java 8 Streams.

List<Value> values = map.values().stream().collect(Collectors.toList());

map.entrySet() le ofrece una colección de Map.Entry objetos que contienen clave y valor. luego puede transformar esto en cualquier objeto de colección que desee, como new ArrayList(map.entrySet());

una lista de qué?

Suponiendo que map es su instancia de Map

  • map.values() devolverá un Collection que contiene todos los valores del mapa.
  • map.keySet() devolverá un Set que contiene todas las claves del mapa.

Supongo que usted desea convertir los valores contenidos en el Map a un list?Más fácil es llamar a la values() método de la Map la interfaz.Esto devolverá el Collection de valor de los objetos contenidos en la Map.

Tenga en cuenta que este Collection está respaldado por la Map objeto y cualquier cambio en la Map objeto de reflejar aquí.Así que si usted desea una copia independiente no vinculado a su Map objeto, basta con crear una nueva List el objeto como un ArrayList pasando el valor Collection como a continuación.

ArrayList<String> list = new ArrayList<String>(map.values());

Puedes hacerlo así

List<Value> list = new ArrayList<Value>(map.values());

Si desea asegurarse de que los valores en el List<Value> resultante están en el orden de las teclas de la entrada Map<Key, Value>, debe " ir a través de " SortedMap de alguna manera.

O bien comenzar con una implementación concreta TreeMap (como Map) o inserte su entrada List en una Hashtable antes de convertirla en ConcurrentHashMap. por ejemplo:

Map<Key,Value> map;
List<Value> list = new ArrayList<Value>( new TreeMap<Key Value>( map ));

De lo contrario, obtendrá el orden nativo que proporciona la implementación <=>, que a menudo puede ser algo diferente al orden de las teclas naturales (intente <=> o <=>, para variar).

    Map<String, Integer> map = new HashMap<String, Integer>();
    map.put("java", 20);
    map.put("C++", 45);

    Set <Entry<String, Integer>> set = map.entrySet();

    List<Entry<String, Integer>> list = new ArrayList<Entry<String, Integer>>(set);

podemos tener pares de clave y valor en la lista. También podemos obtener clave y valor usando Map.Entry iterando sobre la lista.

// you can use this
List<Value> list = new ArrayList<Value>(map.values());

// or you may use 
List<Value> list = new ArrayList<Value>();
for (Map.Entry<String, String> entry : map.entrySet())
{
list.add(entry.getValue());    
}
"Map<String , String > map = new HapshMap<String , String>;
 map.add("one","java");
 map.add("two" ,"spring");
 Set<Entry<String,String>> set =  map.entrySet();
 List<Entry<String , String>> list = new ArrayList<Entry<String , String>>    (set);
 for(Entry<String , String> entry : list ) {
   System.out.println(entry.getKey());
   System.out.println(entry.getValue());
 } "

Aquí está el método genérico para obtener valores del mapa.

public static <T> List<T> ValueListFromMap(HashMap<String, T> map) {
    List<T> thingList = new ArrayList<>();

    for (Map.Entry<String, T> entry : map.entrySet()) {
        thingList.add(entry.getValue());
    }

    return thingList;
}
HashMap<Integer, List<String>> map = new HashMap<>(); 
List<String> list = new ArrayList<String>();
list.add("Java");
list.add("Primefaces");
list.add("JSF");
map.put(1,list);
if(map != null){
    return new ArrayList<String>((Collection<? extends String>) map.values());
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top