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();
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
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 null
puede 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.
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
é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
usuario2337320
probablemente puedas hacerlo así:
String k = null;
String v = null;
options.put(k,v);
¿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 unnull
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. Solamentenull
es el puntero correcto a nulo. Asi queput.("name", null);
– Sheldon
18 de julio de 2017 a las 12:24
Feo, pero tal vez crear un
Map<Person[], Person[]>
. Cuando yo veoHashMap
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