我试图删除hadoop中名为outputlist的arraylist中的重复字符串。
这是我的密码:
List<String> newList = new ArrayList<String>();
for( String item : outputList){
if(!newList.contains(item))
newList.add(item);
else newList.add("wrong");
}
问题是newlist中的字符串都是“错误的”。
一些事实:1。上面的代码在本地机器上运行良好。
我可以在hadoop中写出outputlist中的字符串。outputlist中的大多数字符串都不同(存在重复项)。
我尝试了其他方法来删除重复项。比如使用hashset。但是当我使用outputlist初始化hashset时,得到的hashset是空的。
hadoop中的java版本是javac1.6.0\u18
谢谢。
以下是我的代码:
public static class EditReducer
extends Reducer<Text,Text,Text,Text> {
private Text editor2 = new Text();
public void reduce(Text key, Iterable<Text> values,
Context context
) throws IOException, InterruptedException {
//write the content of iterable to an array list.
List<String> editorList =new ArrayList<String>();
for (Text t:values) {
editorList.add(t.toString());
}
//if a user appears more than once in the list, add to outputList
int occ;
List<String> outputList =new ArrayList<String>();
for (int i=0;i<editorList.size();i++) {
occ= Collections.frequency(editorList, editorList.get(i));
if(occ>1) {
outputList.add(editorList.get(i));
}
}
//make outputList distinct
List<String> newList = new ArrayList<String>();
for( String item : outputList){
if(!newList.contains(item))
newList.add(item);
else newList.add("wrong");
}
for (String val : newList) {
editor2.set(val);
context.write(editor2,editor2);
}
}
}
1条答案
按热度按时间uubf1zoe1#
可以创建嵌套的
for
在原稿中循环for
循环并比较字符串: