我有两个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 ne peut itérer qu'une seule fois, il est recommandé d'utiliser Entryset pour le faire
L'itérateur ne peut être parcouru qu'une seule fois, donc l'itérateur interne ne peut pas parcourir la carte entière à chaque fois. Une modification simple consiste à placer la ligne de code qui obtient l'itérateur shamap dans le premier while.
PS : Si vous pouvez garantir une correspondance biunivoque entre la clé et la valeur dans le shamap, vous pouvez envisager d'utiliser le BiMap de goyave, qui peut facilement trouver la clé à partir de la valeur. De cette façon, vous n'avez pas besoin de deux couches de. boucles imbriquées, et l'efficacité sera plus élevée.