【发布时间】:2016-12-11 22:18:23
【问题描述】:
我想比较单个列表中的每个元素,下面的代码提供了我的解决方案:
for (int i = 0; i < list.size(); i++) {
for (int j = i + 1; j < list.size(); j++) {
// compare
}
}
它比较元素索引,例如比较四个元素:
0 to 1
0 to 2
0 to 3
1 to 2
1 to 3
2 to 3
我想使用迭代器实现与上述相同的目的。我使用迭代器的实现:
int i = 0;
for (Iterator<Tuple> it = list.iterator(); it.hasNext();) {
Tuple tB = null;
Tuple tA = it.next();
for(int j = 0; j == i; j++) {
try {
tB = it.next();
if(tA.Username.equals(tB.Username) && .....) {
System.out.println("Match");
} else {
System.out.println("Not Matched");
}
i++;
} catch(NoSuchElementException exc) {
throw exc;
}
}
}
Tuple 是一个具有一些字符串属性的类。
此代码仅将第一个元素与其他元素进行比较并抛出NoSuchElementException,但我想从内部 for 循环移动到外部 for 循环以继续遍历。我怎样才能做到这一点?
【问题讨论】:
-
你需要一个内部迭代器和一个外部迭代器。
-
直接访问有什么问题?您的代码已经可以使用了。
-
@Bohemian 我正在为 apache-pig 编写 java udf,出于测试目的,我在普通 java 上尝试了它,这里的直接访问效果很好,但我使用了 apache pig 的 Tuple 类并从中列出了它。我无法使用 i.get(arg) 方法访问属性..我能够在普通 java.Tuple 类实现 Iterator 接口中实现,所以我尝试用 java 进行测试。