我想用otherMap检查origMap的键。如果找到其他map的值作为键的值,则将origMap的值作为值
将其放入新的hashmap中。如果没有找到,则在相同的地图中使用Bigdecimal地点计算orig的所有值,作为键“other”,并将值计算为bigdecimal输出。我正在尝试如下,但它没有工作抛出空指针,不知道是什么问题。
图:
HashMap < String, Object > origMap = new HashMap < String, Object > ();
origMap.put("test", "1");
origMap.put("test2", "100.00");
origMap.put("test3", "3");
origMap.put("test4", "300.23");
HashMap < String, Object > otherMap = new HashMap < String, Object > ();
otherMap.put("test3", "fee");
otherMap.put("test2", "tax");
代码:
Map newMap = new HashMap();
BigDecimal value1 = null;
for (Map.Entry <? , ?> me: origMap.entrySet())
{
String key = "";
String value = "";
if (otherMap.get(key).equals(me.getKey()))
{
key = otherMap.get(me.getKey()).toString();
value = origMap.get(me.getKey()).toString();
newMap.put(key, value);
}
else
{
value = origMap.get(me.getKey()).toString();
value1 = value1.add(new BigDecimal(value));
}
queryMap.put("others", value1);
}
答案 0 :(得分:1)
otherMap.get(key)
找不到key=""
的条目,因此对equals(...)
的调用会抛出NPE。
由于您似乎尝试在me.getKey()
尝试otherMap
或otherMap.get(me.getKey()) != null
中检查otherMap.containsKey(me.getKey()=)
是否有条目。
此外,otherMap.get(key).equals(me.getKey())
在您的情况下永远不会成立(与key
的值无关),因为您将otherMap
的值与来自{{1}的键进行比较}}
另请注意,调用origMap
也可能会导致NPE,除非您确定没有空值。
我会尝试将您的代码重构为我认为您想要的内容:
toString()
顺便说一句,如果所有值都是字符串,为什么Map<String, String> newMap=new HashMap<>(); //as of Java 7
BigDecimal value1=null;
for (Map.Entry<String,Object> me : origMap.entrySet()) {
if(otherMap.containsKey( me.getKey() )) {
Object otherValue = otherMap.get(me.getKey());
Object origValue = origMap.get(me.getKey());
String key = otherValue != null ? otherValue.toString() : null; //note: this might cause problems if null keys are not allowed
String value = origValue != null ? origValue.toString() : null;
newMap.put(key, value);
}else {
Object origValue = origMap.get(me.getKey());
if( origValue != null ) {
value1=value1.add(new BigDecimal( origValue.toString())); //note: this might cause NumberFormatException etc. if the value does not represent a parseable number
}
}
queryMap.put("others", value1);
}
和origMap
类型为otherMap
?在这种情况下Map<String, Object>
更适合,因此不需要Map<String, String>
调用(以及空检查)。