Java ArrayList<;字符串>。hadoop中的contains()
我试图删除Hadoop中名为outputList的ArrayList中的重复字符串 这是我的密码:Java ArrayList<;字符串>。hadoop中的contains(),java,hadoop,arraylist,Java,Hadoop,Arraylist,我试图删除Hadoop中名为outputList的ArrayList中的重复字符串 这是我的密码: List<String> newList = new ArrayList<String>(); for( String item : outputList){ if(!newList.contains(item)) newList.add(item); else newList.add("wrong"); } Li
List<String> newList = new ArrayList<String>();
for( String item : outputList){
if(!newList.contains(item))
newList.add(item);
else newList.add("wrong");
}
List newList=newarraylist();
用于(字符串项:输出列表){
如果(!newList.contains(项))
新建列表。添加(项);
else newList。添加(“错误”);
}
问题是newList中的字符串都是“错误的”
一些事实:
1.上述代码在本地机器上运行良好
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);
}
}
}
公共静态类EditReducer
伸缩减速机{
私有文本编辑器2=新文本();
public void reduce(文本键、Iterable值、,
语境
)抛出IOException、InterruptedException{
//将iterable的内容写入数组列表。
List editorList=new ArrayList();
对于(文本t:值){
add(t.toString());
}
//如果用户在列表中出现多次,请添加到outputList
国际货币兑换中心;
List outputList=new ArrayList();
对于(int i=0;i1){
add(editorList.get(i));
}
}
//使输出列表不同
List newList=newarraylist();
用于(字符串项:输出列表){
如果(!newList.contains(项))
新建列表。添加(项);
else newList。添加(“错误”);
}
for(字符串val:newList){
编辑器2.set(val);
编写(editor2,editor2);
}
}
}
您可以在原始for
循环中创建嵌套的for
循环,并以这种方式比较字符串:
List<String> newList = new ArrayList<String>();
for(String item : outputList) {
boolean contains = false;
for(String str: newList) {
if(str.equals(item)) {
contains = true;
break;
}
}
if(!contains) {
newList.add(item);
}
else {
newList.add("wrong");
}
}
List newList=newarraylist();
用于(字符串项:输出列表){
布尔包含=假;
for(字符串str:newList){
如果(str.equals(项目)){
包含=真;
打破
}
}
如果(!包含){
新建列表。添加(项);
}
否则{
新列表。添加(“错误”);
}
}
@Jean FrançoisSavard我必须读取列表的输入来计算频率。我为我的减速机添加了代码clear@Jean-弗朗索瓦·萨瓦德什么是编辑2?write(editor2,editor2)方法做什么?为什么不把outputList
aHashSet
变成ArrayList
?这样,您可以自动删除重复项,因为HashSet
不存储重复项。它还可以避免您将错误的添加到输出列表中。实际上,不需要重新设计轮子,您的内部循环会执行与包含方法相同的操作