我想比较单个列表中的每个元素,下面的代码为我提供了解决方案:
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循环以保持遍历。我怎样才能做到这一点?
答案 0 :(得分:3)
嗨,你得到了Exception,因为你的it.next()在内部for循环中。你需要第二个迭代器。
for (Iterator<Tuple> it = list.iterator(); it.hasNext();)
{
Tuple tA = it.next();
List<Tuple> tmpList = new ArrayList<Tuple>(list);
tmpList.remove(tA);
for( Iterator<Tuple> it2 = tmpList.iterator(); it2.hasNext();) {
try{
Tuple tB=it2.next();
if(tA.Username.equals(tB.Username) && .....)
{
System.out.println("Match");
}
else
{
System.out.println("Not Matched");
}
i++;
}
catch(NoSuchElementException exc)
{
throw exc;
}
}
}
答案 1 :(得分:1)
要赞美shsvd98 answer,您可以使用 li.Attributes.Add("style", "color:" + color);
代替ListIterator
。 Iterator
扩展了ListIterator
并提供了更多功能。
例如,以下代码与您的第一个代码块完全相同。它也不会将元素与自身进行比较,也不需要在每个外部for循环迭代后创建另一个Iterator
。
List
我运行了上述代码,用Tuple tA = null;
Tuple tB = null;
for (ListIterator<Tuple> one = list.listIterator(); one.hasNext();) {
// set 'tA' here, not in the nested for loop
tA = one.next();
// initialize 'two' with the next index of 'one'
for(ListIterator<Tuple> two = list.listIterator(one.nextIndex()); two.hasNext();) {
// set 'tB' here
tB = two.next();
// debug line used in output below this code block
// System.out.print("tA:" + tA + " to tB:" + tB + " ");
try {
if(tA.username.equals(tB.username)) {
System.out.println("Match");
} else {
System.out.println("Not Matched");
}
} catch(NoSuchElementException exc) {
throw exc;
}
}
}
切换出Tuple
。
String
如果您对使用Populated ArrayList with ["a", "b", "c", "b"]
Output:
tA:a to tB:b Not Matched
tA:a to tB:c Not Matched
tA:a to tB:b Not Matched
tA:b to tB:c Not Matched
tA:b to tB:b Match
tA:c to tB:b Not Matched
优于ListIterator
的好处感到好奇,那么ListIterator
documentation会提供更多见解。