我有这个奇怪的问题:迭代一个linkedhashmap的keyset,get在某些键上返回null:
...
System.out.println("Map: "+wildCardSummaryKey);
try {
rowKeys = wildCardSummaryKey.keySet().iterator();
while (rowKeys.hasNext()) {
String rowKey = (String) rowKeys.next();
ProcessTables.Counter counter = (ProcessTables.Counter) wildCardSummary.get(rowKey);
System.out.println("key='"+rowKey+"', containsKey="+wildCardSummaryKey.containsKey(rowKey)+", value="+counter);
System.out.println("count: "+counter.getCount());
}
} catch(NullPointerException e) {
e.printStackTrace();
}
输出(手动格式化以获得更好的可读性):
Map: {
abc:abc vpn:Klant:Stichting BlaBla College:Stichting BlaBla College=com.my.ProcessTables$Counter@54deac,
abc:abc uni/nni:Klant:CA BlaBla F & O BV:CA BlaBla F & O BV=com.my.ProcessTables$Counter@43e6ee5f,
abc:abc vpn:Klant:CA BlaBla F & O BV:CA BlaBla F & O BV=com.my.ProcessTables$Counter@6e2bc1cc,
abc:abc uni/nni:Klant:Stichting BlaBla College:Stichting BlaBla College=com.my.ProcessTables$Counter@7ac07095
}
key='abc:abc vpn:Klant:Stichting BlaBla College:Stichting BlaBla College', containsKey=true, value=null
java.lang.NullPointerException
at com.my.ProcessTables.getData(ProcessTables.java:1166)
at com.my.ProcessTables.processRequest_getData(ProcessTables.java:1629)
at com.my.ProcessTables.processRequest(ProcessTables.java:81)
第1166行是这一行:System.out.println(" count:" + counter.getCount());
所以:虽然迭代器给了我关键,但我无法从地图中获取值对象!到底是怎么回事?任何想法?
谢谢! 坦率
答案 0 :(得分:3)
从此SOP声明中可以看到包含该键的地图wildCardSummaryKey
。
System.out.println("key='"+rowKey+"', containsKey="+wildCardSummaryKey.containsKey(rowKey)+", value="+counter);
但是,您尝试根据rowKey
检索值的地图是wildCardSummary
。此地图可能不包含rowKey
,因此会返回分配给null
的{{1}}。
您可能需要从counter
地图获取counter
。
wildCardSummaryKey
答案 1 :(得分:1)
LinkedHashMap可能包含null作为合法值,Java中的其他几种Map实现也是如此。
如果您查看此链接,可以在文本中看到:
http://docs.oracle.com/javase/7/docs/api/java/util/LinkedHashMap.html
“此类提供所有可选的Map操作,并允许null元素。”