我有两个map的大致结构如下:
【idmap】
111 aaa
113 bbb
114 ccc
115 aaa
116 ddd
【shamap】:
1 aaa
2 bbb
3 ccc
4 ddd
需要得到的结果是:
1 aaa 111
2 bbb 113
3 ccc 114
1 aaa 115
4 ddd 116 这种的。
就是说,shamap里面存的是没有重复的,然后每个value都对应一个序列1,2,3.....
我需要做的其实就是将shamap里面的value的值的序号加到idmap里面,idmap里面相同value的序号是一样的。
我想的是在一个idmap的迭代里面再放入shamap的迭代,然后判断两个map的value是否相同再输出。但是结果总是不对
Iterator<String> it = idmap.keySet().iterator();
Iterator<String> it2 = shamap.keySet().iterator();
while(it.hasNext()) {
String count = null;
String key = it.next();
String value = idmap.get(key);
while(it2.hasNext()){
String col = it2.next();
String value2 = shamap.get(col);
if (value.equals(value2)){
count= col;
}
}
System.out.println(count+" "+value+" "+key);
}
结果却只显示第一个的。。不知道是哪里逻辑不对,该怎么改呢。
1 aaa 111
null bbb 112
null ccc 114
null aaa 115
null ddd 116
Iterator只能迭代一次,建议使用entryset来做
迭代器只能遍历一次,所以里层的迭代器并不是每一次都能遍历整个map,一个简单的改法,把获得shamap迭代器的那行代码放入第一个while里面。
PS:如果能够保证shamap里面key和value一一对应的话,可以考虑用guava的BiMap,能够方便的从value找到key,这样就不需要两层循环嵌套的来了,效率会高一点。