HashMaps y valores nulos?

5 minutos de lectura

avatar de usuario
chico_neutrón

¿Cómo se pasan valores nulos a un HashMap?
El siguiente fragmento de código funciona con las opciones rellenadas:

HashMap<String, String> options = new HashMap<String, String>();  
options.put("name", "value");
Person person = sample.searchPerson(options);  
System.out.println(Person.getResult().get(o).get(Id));    

Entonces, el problema es qué debe ingresarse en las opciones y/o el método para pasar un valor nulo.
Probé el siguiente código sin ningún éxito:

options.put(null, null);  
Person person = sample.searchPerson(null);    

options.put(" ", " ");  
Person person = sample.searchPerson(null);    

options.put("name", " ");  
Person person = sample.searchPerson(null);  

options.put();  
Person person = sample.searchPerson();    

  • ¿Qué implica “sin ningún éxito”? ¿Cuál es el problema? ¿Recibes un mensaje de error?

    – Hasta Helge

    26 de febrero de 2013 a las 14:09

  • Aprenda a usar un mapa por separado y luego intégrelo en su programa. docs.oracle.com/javase/6/docs/api/java/util/Map.html

    – Christophe Roussy

    26 de febrero de 2013 a las 14:22

  • ¿Por qué no obtenemos una excepción de puntero nulo después de agregar nulo como clave en el mapa?

    – Amit

    25 de enero de 2016 a las 13:08

  • " " en no un null cadena, es una cadena que contiene un solo carácter de espacio. Así que para buscar ese uso " ". "" tampoco es nulo, está en una cadena vacía. Solamente null es el puntero correcto a nulo. Asi que put.("name", null);

    – Sheldon

    18 de julio de 2017 a las 12:24


  • Feo, pero tal vez crear un Map<Person[], Person[]>. Cuando yo veo HashMap en el lado izquierdo de una declaración de variable, mi inclinación es eliminar el “Hash”.

    – Sridhar Sarnobat

    2 de agosto de 2017 a las 21:24

avatar de usuario
Kenor

HashMap es compatible con ambos null claves y valores

http://docs.oracle.com/javase/6/docs/api/java/util/HashMap.html

… y permite valores nulos y la clave nula

Entonces, su problema probablemente no sea el mapa en sí.

  • Solo agregue que ConcurrentHashMap no permite que se use nulo como clave o valor.

    – alfonx

    22 de julio de 2014 a las 14:14


avatar de usuario
shuchi jainista

Puede tomar nota de las siguientes posibilidades:

1. Los valores ingresados ​​en un mapa pueden ser null.

Sin embargo con múltiples null claves y valores solo tomará un valor nulo par de valores clave una vez.

Map<String, String> codes = new HashMap<String, String>();

codes.put(null, null);
codes.put(null,null);
codes.put("C1", "Acathan");

for(String key:codes.keySet()){
    System.out.println(key);
    System.out.println(codes.get(key));
}

la salida será:

null //key  of the 1st entry
null //value of 1st entry
C1
Acathan

2. tu código se ejecutará null sólo una vez

options.put(null, null);  
Person person = sample.searchPerson(null);   

Depende de la implementación de su searchPerson método si desea que varios valores sean nullpuede implementar en consecuencia

Map<String, String> codes = new HashMap<String, String>();

    codes.put(null, null);
    codes.put("X1",null);
    codes.put("C1", "Acathan");
    codes.put("S1",null);


    for(String key:codes.keySet()){
        System.out.println(key);
        System.out.println(codes.get(key));
    }

producción:

null
null

X1
null
S1
null
C1
Acathan

Parece que está intentando llamar a un método con un parámetro Map. Entonces, para llamar con un nombre de persona vacío, el enfoque correcto debe ser

HashMap<String, String> options = new HashMap<String, String>();
options.put("name", null);  
Person person = sample.searchPerson(options);

O puedes hacerlo así

HashMap<String, String> options = new HashMap<String, String>();
Person person = sample.searchPerson(options);

Usando

Person person = sample.searchPerson(null);

Podría obtener una excepción de puntero nulo. Todo depende de la implementación del método searchPerson().

Es una buena práctica de programación para evitar tener null valores en un mapa.

Si tiene una entrada con null valor, entonces no es posible decir si una entrada está presente en el mapa o tiene un null valor asociado a él.

Puede definir una constante para tales casos (Ejemplo: String NOT_VALID = "#NA"), o puede tener otra colección que almacene claves que tengan null valores.

Por favor, chequee esto Enlace para más detalles.

avatar de usuario
Mahesh Shivaiah

estaba obteniendo hashmap con valores nulos como este

{fieldCode1=F0001, fieldId10=null, fieldId11=null }

Usé el método de usar la biblioteca Guava usando el siguiente enlace
https://www.techiedelight.com/remove-null-values-map-java/

Iterables.removeIf(inputParams.values(), Predicates.isNull());

inputParams es el mapa hash

Valor de Hashmap después de usar el método {fieldCode1=F0001}

Utilice los siguientes paquetes de importación import com.google.common.collect.Iterables; importar com.google.common.base.Predicates;

  • Oye, la pregunta ya tiene una respuesta y tu respuesta no parece agregar más información, especialmente porque el OP no parece usar Guayaba como sugeriste. Puede echar un vistazo a stackoverflow.com/help/how-to-answer

    – Moritz

    10 abr a las 14:29

avatar de usuario
éxodo

De acuerdo con su primer fragmento de código, parece estar bien, pero tengo un comportamiento similar causado por una mala programación. ¿Ha verificado que la variable “opciones” no sea nula antes de la llamada de venta?

Estoy usando la aplicación web Struts2 (2.3.3) y uso un HashMap para mostrar los resultados. Cuando se ejecuta (en una clase inicializada por una clase de Acción):

if(value != null) pdfMap.put("date",value.toString());
else pdfMap.put("date","");

Tengo este error:

Struts Problem Report

Struts has detected an unhandled exception:

Messages:   
File:   aoc/psisclient/samples/PDFValidation.java
Line number:    155
Stacktraces

java.lang.NullPointerException
    aoc.psisclient.samples.PDFValidation.getRevisionsDetail(PDFValidation.java:155)
    aoc.action.signature.PDFUpload.execute(PDFUpload.java:66)
    sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    ...

Parece que NullPointerException apunta al método put (línea número 155), pero el problema era que el mapa no se había inicializado antes. Se compiló bien ya que la variable está fuera del método que establece el valor.

  • Oye, la pregunta ya tiene una respuesta y tu respuesta no parece agregar más información, especialmente porque el OP no parece usar Guayaba como sugeriste. Puede echar un vistazo a stackoverflow.com/help/how-to-answer

    – Moritz

    10 abr a las 14:29

avatar de usuario
usuario2337320

probablemente puedas hacerlo así:

String k = null;
String v = null;
options.put(k,v);

¿Ha sido útil esta solución?