我有一个名为values(Iterable值)的Iterable对象,我想将它们添加到不同元素的列表中。Java遍历可重用的<Text>值并将它们添加到不同值列表中
for (Text val : values) {
if (!mylist.contains(val)) {
mylist.add(val);
}
}
它onlu增加了一个元素到这个列表。如果我删除这个条件来检查独特性,我会看到所有元素都被重复。
我已经尝试了很多东西,我想,也许我应该使用获得()方法,这样
for (Text val : values) {
if (!mylist.contains(val.get())) {
mylist.add(val.get());
}
}
但随后的Java给出了这样的错误,该符号VAL未发现:
>editorPairs.java:67: cannot find symbol
>symbol : method get()
>location: class org.apache.hadoop.io.Text
> mylist.add(val.get());
> ^
>1 error
完整的代码如下:
public void reduce(Text key, Iterable<Text> values, Context context)
throws IOException, InterruptedException {
List<Text> mylist = new ArrayList<Text>();
for (Text val : values) {
if (!mylist.contains(val)) {
mylist.add(val);
}
}
if(mylist.size() > 1) {
int size = mylist.size();
for (int i=0; i<size; ++i) {
Text t1 = mylist.get(i);
context.write(t1, t1);
}
}
}
为什么不使用'Set'?另外,'context.write(t1,t1);'应该做什么? –
我也尝试设置,但它也发生在设置以及。我知道该集只能包含不同的值,但在我的hadoop程序中,输出结果是相同的。 –