可以迭代的ArrayList元素发生变化
所以我正在实现mapreduce工作,这意味着我正在处理键值对。
我有变量
Iterable values
FreqDataWritable是一个包含信息片段的对象,但是现在我只关心它所拥有的一条信息,它是一个由getFilename()访问的String。
我有以下循环:
ArrayList filenames = new ArrayList(); for(FreqDataWritable i : values) { filenames.add(i.getFilename()); }
现在,我想要做的就是在数组列表文件名中打印值。
for(int i = 0; i < filenames.size(); i++) { System.out.println(filenames.get(i)); }
但是,当我这样做时,文件名中的所有内容都是相同的。 唯一打印出的是多次打印的单个文件名。
我的原始代码比这更复杂,但我简化了它的帮助。 有人知道怎么修这个东西吗?
谢谢
我想到了。 Hadoop有一个奇怪的内存使用,所以当我第一次迭代这些值时,它只是一遍又一遍地向arraylist添加相同的对象。
相反,我需要这样做:
for(FreqDataWritable i : values) { filenames.add(new String(i.getFilename())); }
for(String filename : filenames) { System.out.println(fn); }
如果这有用,请告诉我?
你尝试过基于迭代器的方法吗?
Iterator i = values.iterator(); fileNames.add(i.next().getFileName()); for(i; i.hasNext();) { String stringI = i.next().getLast().getFileName(); if(!stringI.equals(fileNames.get(fileNames.size() - 1))) fileNames.add(i.next().getLast().getFileName()); }