example entry ejemplo java map set

ejemplo - entry java example



Convierta Set<Map.Entry<K, V>> a HashMap<K, V> (5)

No hay una API incorporada en Java para la conversión directa entre HashSet y HashMap , necesita iterar a través del conjunto y usar el relleno de Entry en el mapa.

una aproximación:

Map<Integer, String> map = new HashMap<Integer, String>(); //fill in map Set<Entry<Integer, String>> set = map.entrySet(); Map<Integer, String> mapFromSet = new HashMap<Integer, String>(); for(Entry<Integer, String> entry : set) { mapFromSet.put(entry.getKey(), entry.getValue()); }

Aunque cuál es el propósito aquí, si realiza algún cambio en Set que también se reflejará en Map como conjunto devuelto por Map.entrySet es copia de seguridad por Map . Ver javadoc continuación:

Establecer <Entry <Integer, String >> java.util.Map.entrySet ()

Devuelve una vista de Conjunto de las asignaciones contenidas en este mapa. El conjunto está respaldado por el mapa, por lo que los cambios en el mapa se reflejan en el conjunto y viceversa. Si el mapa se modifica mientras una iteración sobre el conjunto está en progreso (excepto a través de la propia operación de eliminación del iterador, o mediante la operación setValue en una entrada de mapa devuelta por el iterador) los resultados de la iteración no están definidos. El conjunto admite la eliminación de elementos, que elimina la asignación correspondiente del mapa, a través de Iterator.remove, Set.remove, removeAll, retainAll y operaciones claras. No admite agregar o agregar todas las operaciones.

En un punto de mi código, creé un Set<Map.Entry<K, V>> desde un mapa. Ahora quiero volver a crear el mismo formulario de mapa, por lo que quiero convertir el HashSet<Map.Entry<K, V>> nuevo en un HashMap<K, V> . ¿Java tiene una llamada nativa para hacer esto, o tengo que recorrer los elementos establecidos y construir el mapa manualmente?


En Java 8 con combinador correcto

Map<Integer, String> map = new HashMap<>(); //fill in map Set<Map.Entry<Integer, String>> set = map.entrySet(); Map<Integer, String> mapFromSet =set.stream().collect(HashMap::new,(t, u) -> t.put(u.getKey(), u.getValue()), (Map mapToReturn, Map otherMap) -> { otherMap.entrySet().forEach((Map.Entry entry) -> { mapToReturn.put(entry.getKey(),entry.getValue()); }); return mapToReturn;}););


Una solución Java 8 bastante corta. Puede lidiar con llaves duplicadas.

Map<Integer, String> map = new HashMap<>(); //fill in map Set<Map.Entry<Integer, String>> set = map.entrySet(); Map<Integer, String> mapFromSet = set.stream().collect(Collectors.toMap(Entry::getKey, Entry::getValue, (a,b)->b));

Editar: gracias a shmosel que merece más crédito que yo por esto



Solución Java-8 más simple que involucra a Collectors.toMap :

Map<Integer, String> mapFromSet = set.stream() .collect(Collectors.toMap(Entry::getKey, Entry::getValue));

Se IllegalStateException una IllegalStateException si se encuentra una clave duplicada.