我有一個名爲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程序中,輸出結果是相同的。 –