繁体   English   中英

Java迭代器的怪异行为

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM