HashMaps 和 Null 值?

如何将 null 值传递到 HashMap?
下面的代码段使用填充的选项:

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));

那么问题就是要在选项和方法中输入什么才能传递一个空值?
我尝试了以下代码,但没有成功:

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();
256889 次浏览

HashMap 同时支持 null键和值

Http://docs.oracle.com/javase/6/docs/api/java/util/hashmap.html

并允许空值和空键

所以你的问题可能不是地图本身。

根据您的第一个代码片段似乎没有问题,但我也有类似的行为造成的不良编程。你有没有检查“ options”变量在 put 调用之前是否为 null?

我正在使用 Struts2(2.3.3) webapp 并使用 HashMap 来显示结果。 执行时(在由 Action 类初始化的类中) :

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

得到这个错误:

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)
...

似乎 NullPointerException 指向 put 方法(第155行) ,但问题是 de Map 以前没有初始化过。由于变量不在设置该值的方法中,所以编译没有问题。

你可以这样做:

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

似乎您正在尝试使用 Map 参数调用一个方法。 因此,要使用空的人名调用,正确的方法应该是

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

或者你可以这样做

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

吸毒

Person person = sample.searchPerson(null);

可能会导致空指针异常,这完全取决于 searchPerson ()方法的实现。

你可留意以下可能性:

1. 映射中输入的值可以是 null

但是,与多个 null键和值,它将只采取一个空 键值对一次。

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));
}

产出将包括:

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

2. 代码只执行 null一次

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

这取决于 searchPerson方法的实现 如果希望多个值为 null,则可以相应地实现

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));
}

产出:

null
null


X1
null
S1
null
C1
Acathan

对于 避免在 Map 中使用 null来说,这是一个很好的编程实践。

如果您有一个具有 null值的条目,那么就无法判断该条目是否存在于映射中,或者是否具有与之相关联的 null值。

您可以为这种情况定义一个常量(例如: String NOT_VALID = "#NA") ,也可以有另一个集合存储具有 null值的键。

详情请参阅此 链接

我得到了像这样带有空值的散列表

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

我使用的方法从使用番石榴库使用下面的链接 Https://www.techiedelight.com/remove-null-values-map-java/

RemoveIf (inputParams.values () ,Precates.isNull ()) ;

InputParams 是散列表

使用方法{ fieldCode1 = F0001}后的散列表值

使用下面的导入包 Import com.google.common.Collection. Iterables; 导入 com.google.common.base 谓词;