我在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;值。
有人可以解释为什么第二个值为空以及我可以做些什么来修复?
答案 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时,它只存储一个元素并且每次都删除其他元素。所以错误不是来自我在这里发布的代码,真正“空”的值。