Java 使用迭代器遍历ArrayList并使用instanceof设置对象
我有一个对象的ArrayList和一个遍历它们的迭代器。我试图在列表中找到Ant对象的实例,并将其分配给Ant变量Java 使用迭代器遍历ArrayList并使用instanceof设置对象,java,arraylist,iterator,Java,Arraylist,Iterator,我有一个对象的ArrayList和一个遍历它们的迭代器。我试图在列表中找到Ant对象的实例,并将其分配给Ant变量 while(iterator.hasNext()) { if(iterator.getNext() instanceof Ant) { Ant ant = (Ant)iterator.getNext(); } } 由于iterator.getNext()在调用时递增迭代器,因此上面的代码将ant后面的对象分配给ant变量。我想知道如何将列表中的An
while(iterator.hasNext()) {
if(iterator.getNext() instanceof Ant) {
Ant ant = (Ant)iterator.getNext();
}
}
由于iterator.getNext()在调用时递增迭代器,因此上面的代码将ant后面的对象分配给ant变量。我想知道如何将列表中的Ant对象正确地分配给Ant变量。您调用了两次
.getNext()
,因此您实际上是在检查对象之后强制转换对象
while(iterator.hasNext()) {
if(iterator.getNext() instanceof Ant) {
Ant ant = (Ant)iterator.getNext();
}
}
试试这个:
while(iterator.hasNext()) {
Object obj = iterator.next();
if (obj instanceof Ant) {
Ant ant = (Ant)obj;
}
}
还要注意的是,在迭代器中检索底层对象是
.next()
而不是.getNext()
。之所以发生这种情况,是因为您调用了迭代器.getNext()
两次:第一次是在条件中,然后是在条件体中,所以您错过了第一个值,然后尝试第二次调用Ant类型。你需要像这样的代码
while(iterator.hasNext()) {
Object obj = null;
if((obj = iterator.getNext()) instanceof Ant) {
Ant ant = (Ant)obj;
}
}
的重复答案,其中包含有效代码(未定义方法getNext()
),以及不使用内联赋值的可读性更强的代码。