Almacenamiento en Java y búsqueda de HashMap en HashSet

Tengo un conjunto con hashmaps multidimensionales, así:

Set<HashMap<String, HashMap<String, String>>> myHashSet = new HashSet<HashMap<String, HashMap<String, String>>>();

Tengo problemas para eliminar una entrada de HashMap. Sé la clave para el hashmap de nivel superior, pero no conozco ningún dato en el hashmap subyacente. Estoy tratando de eliminar una entrada de hashmap en el conjunto de estas maneras:

YO.

Set<HashMap<String, HashMap<String, String>>> myHashSet = new HashSet<HashMap<String, HashMap<String, String>>>();

... Add some hashmaps to the set, then ...

String myKey = "target_key";
setInQuestion.remove(myKey);

II

Set<HashMap<String, HashMap<String, String>>> myHashSet = new HashSet<HashMap<String, HashMap<String, String>>>();

... Add some hashmaps to the set, then ...

String myKey = "key_one"; //Assume a hashmap has been added with this top level key
HashMap<String, HashMap<String, String>> removeMap = new HashMap<String, HashMap<String, String>>();
HashMap<String, String> dummyMap = new HashMap<String, String>();
removeMap.put(myKey, dummyMap);
setInQuestion.remove(removeMap);

Ninguno de estos métodos funciona. ¿Cómo haría para eliminar una entrada en el conjunto si solo conozco la clave del hashmap de nivel superior?

Respuesta 1

Collection.remove()requiere igualdad de objeto. las diversas implementaciones de jdk Map implementan igualdad para que todas las claves / valores deben coincidir. Como ninguno de los objetos que está pasando a la remove()llamada sería "igual" a ninguno de los Mapas en el Conjunto, no se eliminará nada.

la única forma de hacer lo que quiere es recorrer el Set usted mismo para encontrar el Mapa correspondiente (o hacer que el Set se convierta en un Mapa con esa tecla especial).

Respuesta: 2

Gracias jtahlborn por la orientación. Quería publicar la solución que encontré como resultado de su respuesta:

String myKey = "Key_In_Question";
Iterator mySetIterator = myHashSet.iterator();
while(mySetIterator.hasNext()) {
    HashMap<String, HashMap<String, String>> entry = (HashMap<String, HashMap<String, String>>) mySetIterator.next();
    if(entry.containsKey(myKey)) {
        myHashSet.remove(entry);
    }
}
Respuesta: 3

Tengo problemas con JPA para mantener los datos antiguos en caché y he probado las soluciones que pude encontrar, ¡pero sigue apareciendo! De todos modos, inicialmente reutilicé una instancia de Entity Manager para mayor eficiencia. Cuando yo ...

Usando JAVA. Estoy tratando de encontrar una forma más elegante para validar una ruta de carpeta de Linux (sin incluir el nombre del archivo). Lo que tengo hasta ahora es esto: "^ \\ / $ | ^ ((\\ / ([a-zA-Z0-9 _-] +)) +) $" Rutas de carpetas ...

Tengo un oyente de documentos, y es fuente indirecta, JTextArea (JTextArea.getDocument (). AddDocumentListener, etc.). Necesito que mi oyente tenga acceso a JTextArea, pero sin hacer referencia. Alguna cosa ...

¿Puedo saber cómo funciona Netty con Image a través de http? ¿Alguna muestra o tutorial? Básicamente quiero saber: 1) cómo recibir la imagen cargada del cliente 2) cómo responder la imagen por respuesta http