Java ArrayList<;字符串>。hadoop中的contains()

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

我试图删除Hadoop中名为outputList的ArrayList中的重复字符串

这是我的密码:

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.上述代码在本地机器上运行良好

  • 我可以在hadoop中写出outputList中的字符串。outputList中的大多数字符串是不同的(存在重复项)

  • 我尝试了其他方法来删除重复的项目。比如使用HashSet。但是当我使用outputList初始化哈希集时,得到的哈希集是空的

  • Hadoop中的java版本是JavaC1.6.0_18

  • 谢谢

    以下是我的减速机代码:

    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
    a
    HashSet
    变成
    ArrayList
    ?这样,您可以自动删除重复项,因为
    HashSet
    不存储重复项。它还可以避免您将
    错误的
    添加到输出列表中。实际上,不需要重新设计轮子,您的内部循环会执行与
    包含
    方法相同的操作