Java迭代器运行不正常
由于某些原因,这里的迭代器不能正常工作。我调试了代码,it1包含元素。但是,当它到达返回前的行时,它是空的。有什么提示吗Java迭代器运行不正常,java,list,oop,collections,iterator,Java,List,Oop,Collections,Iterator,由于某些原因,这里的迭代器不能正常工作。我调试了代码,it1包含元素。但是,当它到达返回前的行时,它是空的。有什么提示吗 private Tasks loadChangeStatusOnTasks(final Tasks updatedTasks, final List<Boolean> changeStatusList) { final Iterator<Task> it1 = updatedTasks.getTasks().iterator();
private Tasks loadChangeStatusOnTasks(final Tasks updatedTasks, final List<Boolean> changeStatusList) {
final Iterator<Task> it1 = updatedTasks.getTasks().iterator();
final Iterator<Boolean> it2 = changeStatusList.iterator();
while(it1.hasNext() && it2.hasNext()) {
it1.next().setAssigneeChanged(it2.next().booleanValue());
}
final Tasks tasks = new Tasks(new ArrayList<TaskDTO>());
tasks.setTasks(IteratorUtils.toList(it1));
return tasks;
}
私有任务loadChangeStatusOnTasks(最终任务更新任务,最终列表changeStatusList){
最终迭代器it1=updatedTasks.getTasks().Iterator();
最终迭代器it2=changeStatusList.Iterator();
while(it1.hasNext()&&it2.hasNext()){
it1.next().setAssigneeChanged(it2.next().booleanValue());
}
最终任务任务=新任务(新ArrayList());
tasks.setTasks(IteratorUtils.toList(it1));
返回任务;
}
当您到达tasks.setTasks(IteratorUtils.toList(it1))
时,it1
已耗尽:其所有元素已被消耗
如果要创建并分配新列表,只需执行以下操作:
return new Tasks(new ArrayList<>(updatedTasks.getTasks()));
返回新任务(新ArrayList(updateTasks.getTasks());
迭代器已在上一个while循环中迭代,并且没有更多的.hasNext()元素。这就是迭代器utils.toList()将生成空列表的原因
解决方案可能是先创建列表,然后循环列表,以从另一个迭代器设置assigneeChanged属性。迭代器只能迭代一次。我们这里没有足够的信息来帮助您。首先,我们不知道任务是什么。请展示一个简短但完整的程序来演示问题。(njzk2的评估是正确的,但你应该在原则上解决这个问题……)你说的“空”是什么意思?你是说它已经到了尽头<代码>it1.hasNext()==false?这是意料之中的事。谢谢你们两位的帮助。我想njzk2可能有钥匙。我将首先尝试一下,然后在@JonSkeet中更新代码。我必须说,你看到这段代码是一种荣幸,能和你聊天也是一种荣幸。你是开发人员的榜样,我的朋友!;-)谢谢你的回答,简,但是我怎么能尊重逻辑呢?如果我使用return语句,它会像以前一样返回列表,不是吗?是的,但是您希望
IteratorUtils.toList(it1)
做什么?不同之处在于,您在每个任务上调用了setAssigneeChanged
。所以列表的内容被修改了