Java迭代器行为不正常

时间:2015-07-22 14:19:21

标签: java list oop collections 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;
    }

2 个答案:

答案 0 :(得分:0)

当你到达tasks.setTasks(IteratorUtils.toList(it1))时,it1已经用尽:所有元素都已消耗掉了!

如果您想创建一个新列表并进行分配,请执行以下操作:

return new Tasks(new ArrayList<>(updatedTasks.getTasks()));

答案 1 :(得分:0)

迭代器已在前一个while循环中迭代,并且没有更多的.hasNext()元素。这就是IteratorUtils.toList()将产生一个空列表的原因。

解决方案可能是首先创建列表并循环遍历列表以从其他迭代器设置assigneeChanged属性。