栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

对值进行两次迭代(MapReduce)

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

对值进行两次迭代(MapReduce)

如果要再次迭代,我们必须缓存来自迭代器的值。至少我们可以将第一次迭代和缓存结合起来:

Iterator<IntWritable> it = getIterator();List<IntWritable> cache = new ArrayList<IntWritable>();// first loop and cachingwhile (it.hasNext()) {   IntWritable value = it.next();   doSomethingWithValue();   cache.add(value);}// second loopfor(IntWritable value:cache) {   doSomethingElseThatCantBeDoneInFirstLoop(value);}

(只需要添加代码答案,就知道您在自己的注释中提到了该解决方案;))


为什么 不进行缓存就不可能做到:
为什么

Iterator
是实现接口的
Iterator
对象,并且没有一个唯一的要求,即对象实际上存储值。进行两次迭代,您必须重置迭代器(不可能)或克隆它(再次:不可能)。

举一个克隆/重置毫无意义的迭代器为例:

public class Randoms implements Iterator<Double> {  private int counter = 10;  @Override   public boolean hasNext() {      return counter > 0;   }  @Override   public boolean next() {      count--;     return Math.random();          }  @Override   public boolean remove() {      throw new UnsupportedOperationException("delete not supported");   }}


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/413913.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号