假设我已经创建了一个名为“iter”的迭代器和一个名为“database”的arraylist。我希望能够查看arraylist并查看arraylist中的任何元素是否等于名为“test”的String。如果是,那么我想将该元素添加到另一个列表中。
while(iter.hasNext()) {
if(database.next() == test) {
database.next().add(another_list);
}
}
我做错了什么?我对java中的迭代器完全不熟悉。我需要编写自己的迭代器类吗?任何代码示例将不胜感激。感谢
答案 0 :(得分:2)
if(database.contains("test"))
{
another_list.add("test");
}
答案 1 :(得分:2)
代码的问题在于,每次调用.next()
时,它都会将迭代器前进到下一个位置。这意味着这段代码
if(database.next() == test) {
database.next().add(another_list);
}
无法按预期工作,因为对database.next()
的第一次调用不会返回与第二次调用database.next()
相同的值。要解决此问题,您需要创建一个临时变量来保留新值,如下所示:
while(iter.hasNext()) {
/* type */ curr = iter.next();
if(curr == test) {
curr.add(another_list);
}
}
(填写代替/* type */
的迭代内容的实际类型)
但是,在许多情况下,您不需要显式使用迭代器。大多数Collections类型实现Iterable
接口,在这种情况下你可以写
/* container */ c;
for(/* type */ curr: c) {
if(curr == test) {
curr.add(another_list);
}
}
希望这有帮助!