我需要遍历for循环的每次迭代的值集,但仅对于第一次迭代,它可以正常工作。此后itr.hasNext()
返回false
。
Iterator<String> itr = getQuestionIterator(File file);
for(Person p : persons)
{
while(itr.hasNext())
{
String question = itr.next();
........
........
}
}
我很清楚这种行为。
一种解决方案是getQuestionIterator(File file)
在for循环中调用方法,因此对于每个for循环迭代,都会对其进行初始化。但这是非常无效的方法,因为它itr
是独立的。
我尝试了此方法Iterator<String> temp = itr
,但由于它仅包含参考,因此也无法正常工作。
有什么方法可以将迭代器复制到另一个或其他更好的方法中?
An
Iterator
是可能的最小API,可以按顺序处理数据,因此它从基础数据源中抽象出来。由于它只能向前移动(next()
)而没有任何重置或后退选项,因此它是一种单向对象,使用后必须将其丢弃。而且由于它提供的API的限制,无法在不了解实现和/或底层数据源的情况下简单地“复制”它。
因此,有四种方法可以解决您的问题:
(1)从基础数据源重新获取一个新的迭代器
getQuestionIterator(File file)
每当您需要遍历数据时再次调用即可。
(2)将所有处理代码合并到一个迭代循环中
代替…
while (iterator.hasNext()) { /* first processing step */ }
while (iterator.hasNext()) { /* second processing step */ }
while (iterator.hasNext()) { /* third processing step */ }
...
…合并所有步骤:
while (iterator.hasNext()) {
String question = iterator.next();
/* first processing step */
/* second processing step */
/* third processing step */
...
}
(3)将所有元素复制到本地缓存(Collection
)
遍历所有项目一次,并将它们放入本地集合中,您可以用来获取任意数量的迭代器:
// read everything into a local cache
Collection<String> cache = new ArrayList<>();
while (iterator.hasNext()) cache.add(iterator.next());
// now you can get as many iterators from cache as required:
Iterator<String> iter = cache.iterator();
// use iter
iter = cache.iterator(); // once more
// use iter
...
(4)修改数据源API以使其实现处理问题
含义:更改getQuestionIterator(File file)
为返回Iterable<String>
而不是Iterator<String>
。您可以从获得任意数量的迭代器Iterable
:
Iterable<String> iterable = getQuestionIterator(File file);
Iterator<String> iter = iterable.iterator();
// use iter
iter = iterable.iterator(); // once more
// use iter
问题内容: 我有一些数据结构,我想将其中一个用作临时结构,将另一个用作非临时结构。 现在的问题当然是实际上只是指向,因此一旦清除,也是如此。 如何在使用Java时保留值? 问题答案: 您可以使用以下技巧: 或使用 您可以在此处获取有关clone()方法的一些信息 但是您应该记住,所有这些方式都会给您 List 的副本,而不是其所有元素。因此,如果您更改复制的列表中的元素之一,则它也将在原始列表中进
我想将table 1的内容复制到table 2中,但它不是直接复制,因为table 2包含的列比表1多。结构类似于这样: 表 1 { 列 2 列 4 列 6 } 表2{column1 column2 column3 column4 column5 column6} 我想做的是将table1到table2中的每一行相加,并为缺少的列设置默认值。任何帮助都将不胜感激。
您好,我正在尝试将一个表从一个docx文件复制到另一个docx文件,但实际情况是,该表的值在新文档中的表下方和表外部被复制(请参见下面的图片) Talbe在新的docx里 正如您所见,表的值被复制到表的外部。我使用的是Libre Office,ApachePOI版本3.17,我的电脑运行的是Ubuntu 16.04 我用来执行复制的代码如下
问题内容: 我有两个具有相同属性名称的java类。如何将所有属性复制到另一个装有数据的bean中。我不想使用传统形式来复制属性,因为我有很多属性。 提前致谢。 1班 2班 问题答案: 用途:
viewgridobject.java
问题内容: 我有两个Java.io.File对象file1和file2。我想将内容从file1复制到file2。有没有一种标准的方法可以执行此操作,而无需创建必须读取文件1并写入文件2的方法 问题答案: 不,没有内置方法可以做到这一点。与您要完成的工作最接近的是from 的方法,如下所示: 并且不要忘记处理异常并在一个块中关闭所有内容。