循环遍历HashMap返回值" null"

时间:2017-03-10 17:09:34

标签: java loops hashmap

我在java中有一个hashmap,我在其中存储了test:

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))总是返回&#34; null&#34;值。

有人可以解释为什么第二个值为空以及我可以做些什么来修复?

3 个答案:

答案 0 :(得分: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++;
        }
    }

答案 1 :(得分: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);
        }
    }

答案 2 :(得分:0)

谢谢大家的回答。知道我是这个代码是正确的我能够在我的代码中找到我的错误。当我在mapreduce的映射器中创建我的第一个Hashmap时,它只存储一个元素并且每次都删除其他元素。所以错误不是来自我在这里发布的代码,真正“空”的值。