我使用以下方式加入apriori join步骤中生成的集合
Iterator<Entry<List<Integer>, Integer>> i1 = hm.entrySet().iterator() ;
Iterator<Entry<List<Integer>, Integer>> i2 = hm.entrySet().iterator() ;
while(i1.hasNext()) {
while(i2.hasNext()) {
Entry<List<Integer>, Integer> pair1 = i1.next() ;
Entry<List<Integer>, Integer> pair2 = i2.next() ;
// Do some joining part here
System.out.println(pair1.getKey());
System.out.println(pair2.getKey());
}
}
}
实际上,我认为它会迭代哈希映射的所有n * n值。但是发生的事情是两个迭代器并行执行并且只执行n次,就好像两个迭代器都是相同的一样。请提出一种克服此问题的方法。
答案 0 :(得分:3)
你必须在外部循环中创建第二个迭代器,以便它在内循环的每次迭代之前重新开始迭代条目。
另一个必要的更改是获取内部循环外第一个迭代器的当前条目。
Iterator<Entry<List<Integer>, Integer>> i1 = hm.entrySet().iterator() ;
while(i1.hasNext()) {
Entry<List<Integer>, Integer> pair1 = i1.next() ;
Iterator<Entry<List<Integer>, Integer>> i2 = hm.entrySet().iterator() ;
while(i2.hasNext()) {
Entry<List<Integer>, Integer> pair2 = i2.next() ;
// Do some joining part here
System.out.println(pair1.getKey());
System.out.println(pair2.getKey());
}
}
}
答案 1 :(得分:3)
Map<List<Integer>, Integer> hm.....;
for (Map.Entry<List<Integer>,Integer> pair1 : hm.entrySet()) {
for (Map.Entry<List<Integer>,Integer> pair2 : hm.entrySet()) {
// do anything you want with pair1 and pair2,
// just don't make structural change to hm
}
}
在这里没有看到显式迭代器使用的很多价值,我认为简单地使用for-each循环(又称为循环增强)是非常清楚的,所以我稍微改变了OP的方法。