gpt4 book ai didi

java - Reducer 中的 ArrayList 问题

转载 作者:可可西里 更新时间:2023-11-01 15:01:07 25 4
gpt4 key购买 nike

您好,我正在 reducer 中执行一些计算,并尝试将数据加载到 ArrayList 中。当我在稍后的代码点对 ArrayList 执行 get 操作时,ArrayList 中的所有对象都具有相同的值。

public ArrayList<some_class> temp = new ArrayList<some_class>();
//This is global variable

@Override
public void reduce(Key_class key, Iterator<some_class> values,
OutputCollector<Text, Text> output, Reporter reporter)
throws IOException {
if(this.output==null){
this.output=output;
}

while(values.hasNext())
{
//if i print here
//and do the following values.next().val1
//I'm getting the right result
temp.add(values.next());
}

System.out.println(temp.get(0).val1);//Wrong result
}

我得到如下输出:12/10/2012 10:1312/10/2012 10:13

实际输出应该是:12/10/2012 09:1012/10/2012 10:13

感谢您的帮助。谢谢!!!

最佳答案

值的实现是什么?症状的一个原因是,如果 values.mext() 总是返回对同一对象的引用,但更改该对象的值以匹配迭代中的下一项。如果您无权访问其源代码,则可以通过在循环内为 values.next() 结果打印 System.identityHashCode() 来测试这种情况。

如果发生这种情况,您要么需要修复 Iterator 的实现以每次返回不同的对象,要么需要在添加到 ArrayList 之前克隆该对象。

关于java - Reducer 中的 ArrayList 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16884595/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com