[英]Weird behaviour of Java iterators
使用Java迭代器时遇到了一个奇怪的问题。
在某些函数中,将收到一个称为filelist
的可迭代对象,然后执行以下操作:
System.out.println("First iteration:");
for(Text t : filelist) System.out.println(t);
System.out.println("Second iteration:");
for(Text t : filelist) System.out.println(t);
输出为:
First iteration:
file2.txt
file1.txt
file1.txt
Second iteration:
filelist
的类型为Iterable<Text>
。 我正在使用Hadoop map / reduce框架。
所以我的问题是,当我在第一个循环中没有更改文件列表时,为什么在第二个循环中文件列表为空?
Iterable
可能返回不可iterator
。 它的界面上没有什么说不了。 因此,在您的情况下, Iterable
似乎是由库作者设计的,只能使用一次。 如果要第二次迭代,则需要将值存储在自己的结构中。 即您可以先做
List<Text> myList = new ArrayList(filelist)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.