2013-08-22 170 views
0

我要檢查origMap的按鍵與otherMap。如果它發現從採取的othermap值作爲origMap的鍵和值值用java低吞吐量

將其放入新的HashMap的HashMap的鍵比較。如果未找到,則使用Bigdecimal地點與關鍵字「other」中的Bigdecimal地點計算origmap的所有值,並將值設置爲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

堆棧oveflow不允許添加代碼,我正在嘗試。 – user2684215

+3

再努力嘗試;) – Thomas

+0

至於NullPointerException,請標記它出現的位置。 – Thomas

回答

1

otherMap.get(key)不會找到key=""的條目,從而調用equals(...)將拋出NPE。

由於您似乎試圖檢查是否有me.getKey()的條目在otherMap嘗試使用otherMap.get(me.getKey()) != nullotherMap.containsKey(me.getKey()=)

此外,otherMap.get(key).equals(me.getKey())將永遠不會在你的情況真(獨立上的key值),因爲你從otherMaporigMap鍵比較值。

另請注意,除非您確定沒有空值,否則致電toString()也可能導致NPE。

我會嘗試和調整你的代碼是什麼我想你想:

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

順便說一下,爲什麼origMapMap<String, Object>如果所有值都是字符串類型的otherMap?在這種情況下,Map<String, String>會更好,因此不需要調用toString()(以及空檢查)。

+0

是任何在構建方法是否有防止空指針exception.and這裏我檢查1鍵到n鍵。如何優化這個。 – user2684215

+0

我必須使用哪個散列表來自動排除空鍵或值,如果鍵或值爲空或空 – user2684215

+0

@ user2684215取決於您想要實現的內容。你自己也很容易做到這一點。 – Thomas