2011-02-12 54 views
1

说我已经创建了一个名为“iter”的迭代器和一个名为“database”的数组列表。我希望能够查看arraylist并查看arraylist中的任何元素是否等于称为“test”的字符串。如果是,那么我想将该元素添加到另一个列表中。需要帮助逐步通过Java迭代器

while(iter.hasNext()) { 
    if(database.next() == test) { 
     database.next().add(another_list); 
    } 
} 

我在做什么错?我对Java中的迭代器完全陌生。我是否需要编写自己的迭代器类?任何代码示例将不胜感激。由于

回答

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 */灌装)

不过,在许多情况下,您不需要明确使用迭代器。大多数集合类型实现Iterable接口,在这种情况下,你可以只写

/* container */ c; 
for(/* type */ curr: c) { 
    if(curr == test) { 
     curr.add(another_list); 
    } 
} 

希望这有助于!

2
if(database.contains("test")) 
{ 
    another_list.add("test"); 
} 
  1. 您可以使用内置的方法contains(...)
  2. 你应该使用的equals(...)进行数据comparisions
  3. 看看javadoc,看看是否已经有本作的方法你的目的
+0

+1使用正确的工具进行工作。 – I82Much 2011-02-12 03:13:37

+0

这是误导 - 测试不是海报问题中的(必然)字符串。也许修改它不是一个字符串? – nrobey 2011-02-12 03:15:44