【发布时间】:2016-04-22 05:46:12
【问题描述】:
我在使用 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 框架。
所以我的问题是,为什么在第二个循环中文件列表是空的,而我没有在第一个循环中更改它?
【问题讨论】:
-
filelist的类型是什么? -
可迭代。我正在使用 hadoop map/reduce 框架。
-
这段代码在reducer类中使用,所以由于我使用hadoop框架,我假设每个reducer接收一个List
对象。对吗? -
List也是一个接口。添加
System.out.println(filelist.getClass().getName());,并告诉你得到了什么。也就是说,无论是什么类型,除非底层数据结构被同时修改,否则永远不会发生这种情况。 -
请不要在您的问题中添加答案。如果下面的答案解决了您的问题,您应该接受它。