2017-03-10 98 views
-2

我在java的一個HashMap中,我存儲測試:遍歷HashMap中返回值「空」

HashMap<String, String> hmap = new HashMap<Integer, String>(); 

//add elements to HashMap 
hmap.put("1", "AA"); 
hmap.put("2", "BB"); 
hmap.put("3", "CC"); 
hmap.put("4", "DD"); 

然後我想組我的鍵值通過對

for(String id1: hmap.keySet()) { 
      Integer id2 = Integer.valueOf(id1)+1; 
      while(id2 <= 4){ 
       String IDs = id1 + "/" + String.valueOf(id2); 
       String Contents = hmap.get(id1) + "/" + hmap.get(String.valueOf(id2)); 
       System.out.println(IDs); 
       System.out.println(Contents); 
       id2++; 
      } 
     } 

但我得到的結果:

1/2 
AA/null 
1/3 
AA/null 
1/4 
AA/null 
2/3 
BB/null 
2/4 
BB/null 
3/4 
CC/null 

雖然我希望

1/2 
AA/BB 
1/3 
AA/CC 
... 

我張貼的代碼只是舉例。我有一個帶有(ID,值)的HashMap,我想創建一個新的HashMap,其中包含所有ID(每次一對)和值對。但是hmap.get(String.valueOf(id2))總是返回一個「null」值。

有人可以解釋爲什麼第二個值爲空,我能做些什麼來補救?

+0

輸出結果應該是什麼樣子? –

+1

你的HashMap是一個整數 - >字符串映射,你爲什麼在你的代碼中使用String作爲鍵類型? –

+1

您的密鑰類型是整數。你不應該有String.valueOf(id2),因爲它創建了一個字符串類型,並且沒有默認的方法將它轉換爲查找的整數。只要做hmap.get(id2)。 – user1676075

回答

0

你的代碼不正確,試試這個:

for(int id1: hmap.keySet()) { 
     Integer id2 = Integer.valueOf(id1)+1; 
     while(id2 <= 4){ 
      String IDs = id1 + "/" + String.valueOf(id2); 
      String Contents = hmap.get(id1) + "/" + hmap.get(id2); 
      System.out.println(IDs); 
      System.out.println(Contents); 
      id2++; 
     } 
    } 
+0

當我在這裏複製我的代碼時,我犯了一個錯誤我的鑰匙當然是字符串1 2 3 4 – westerlies

+0

你在你的ide中檢查了我的答案嗎? – Murad

+0

是的我修改我的代碼,以整數作爲關鍵並測試您的代碼,但hmap.get(id2)始終爲空。我完全不明白爲什麼。 – westerlies

0

我不太確定你想達到什麼樣的,但我想這是這樣呢?這使所有的鍵和你的價值成對。

HashMap<Integer, String> hmap = new HashMap<Integer, String>(); 
    //add elements to HashMap 
    hmap.put(1, "AA"); 
    hmap.put(2, "BB"); 
    hmap.put(3, "CC"); 
    hmap.put(4, "DD"); 

    for(Integer id1: hmap.keySet()) { 
     for(Integer id2 : hmap.keySet()){ 
      String ids = id1 + "/" + id2; 
      String contents = hmap.get(id1) + "/" + hmap.get(id2); 

      System.out.println(ids); 
      System.out.println(contents); 
     } 
    } 
+0

是的,這是我想要做的,但hmap.get(id2)每次返回「null」,而不是與密鑰id2關聯的值 – westerlies

+0

我獲得的印刷品是 1/2 AA/null 1/3 AA/null 1/4 AA/null ... – westerlies

+0

我獲得以下打印,運行上述的代碼:1/1 AA/AA 1/2 AA/BB 1/3 AA/CC 1/4 AA/DD 2/1 BB/AA 2/2 BB/BB 2/3 BB/CC 2/4 BB/DD 3/1 CC/AA 3/2 CC/BB 3/3 CC/CC 3/4 CC/DD 4/1 DD/AA 4/2 DD/BB 4/3 DD/CC 4/4 DD/DD –

0

謝謝大家的回答。知道我是這個代碼是正確的我能夠在我的代碼中找到我的錯誤。當我在mapreduce的映射器中創建我的第一個Hashmap時,它每次只存儲一個元素並刪除其他元素。所以錯誤不會來自我在這裏發佈的代碼位,真正的「null」的值。