Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java迭代器运行不正常_Java_List_Oop_Collections_Iterator - Fatal编程技术网

Java迭代器运行不正常

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();

由于某些原因,这里的迭代器不能正常工作。我调试了代码,it1包含元素。但是,当它到达返回前的行时,它是空的。有什么提示吗

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
。所以列表的内容被修改了