Reputation: 53
i have this weird problem: iterating over the keyset of a linkedhashmap, the get returns null on certain keys:
...
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();
}
the output is (manually formatted for better readability):
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)
line 1166 is this line: System.out.println("count: "+counter.getCount());
so: although the iterator gives me the key i cannot get the value object from the map! what is going on? any ideas?
thanks! frank
Upvotes: 0
Views: 2228
Reputation: 11
LinkedHashMap may contain null as a legitimate value, as do several other Map implementations in Java.
If you look at this link, you can see that in the text:
http://docs.oracle.com/javase/7/docs/api/java/util/LinkedHashMap.html
"This class provides all of the optional Map operations, and permits null elements."
Upvotes: 1
Reputation: 45070
The map which contains that key is wildCardSummaryKey
as seen from this SOP statement.
System.out.println("key='"+rowKey+"', containsKey="+wildCardSummaryKey.containsKey(rowKey)+", value="+counter);
But the map from which you're trying to retrieve a value based on that rowKey
is, wildCardSummary
. This map probably doesn't contain the rowKey
and thus returns a null
which is assigned to the counter
.
You probably need to get the counter
from wildCardSummaryKey
map.
ProcessTables.Counter counter = (ProcessTables.Counter) wildCardSummaryKey.get(rowKey);
Upvotes: 3