2017-07-31 194 views
1

我有一个包含以下示例数据的电子表格。Java根据条件查找重复项并覆盖/更新重复对象中的部分数据

data sample

在Java中,使用JXL,我将数据读入名为MergeObject.java自定义对象。这个类是一个简单的POJO,其中有列映射到电子表格中的标题。阅读电子表格后,我有一个合并对象的Arraylist。

我不想使用一组,因为我想保留副本。我想循环列表arraylist并找出列表中的重复项。为了符合重复条件,两个条目需要具有相同的名字和姓氏。例如,行2,3,4是重复的,行5,6是重复的,行7,8是重复的。我已经重写了equals方法来定义这个。

这是我的问题。在确定了重复的一组行(2,3,4),(5,6),(7,8)之后,我将定义哪一行优于哪一行。例如,我可能会认为具有“正常评论”的评论部分可能是优秀的副本。确定之后,我想用它的ID值填充“下级副本”的“重复ID”列,然后用“上级副本”行ID替换“下级副本”的ID列。

因此,第4行的重复ID需要与82046555和第4行的ID来填充需要与82046565. 2,3行被替换将不会改变。

我需要使用哪些数据结构?我尝试了下面的代码,但我无法获得列表中的重复项。

任何指针将不胜感激。

   List<ArrayList<MergeObject>> superDuperList = new ArrayList<ArrayList<MergeObject>>(); 

//使用JXL,在一个循环中,我已填充的行到名为saoList一个ArrayList。 List saoList = new ArrayList();

  ArrayList<MergeObject> innerList = new ArrayList<MergeObject>(); 

      MergeObject lastItem = null; 

      for (MergeObject item : saoList) 
      { 
       if(null == lastItem) 
       { 
        innerList.add(item); 
        lastItem = item; 
       } 
       else 
       { 
        if(item.equals(lastItem)) 
        { 
         innerList.add(item); 
        } 
        else 
        { 
         superDuperList.add(innerList); 
         innerList = new ArrayList<MergeObject>(); 
         innerList.add(item); 
         lastItem = item; 
        } 
       } 

      } 
+1

你能否澄清一下'saoList'在这里?我看到你正在循环它,但我没有看到它的声明或任何地方的任务。 –

+0

你能提供你的完整代码,并且你是否尝试调试你的代码,看看为什么不删除重复项? –

+0

@AmitK是的,我试着调试我的代码。首先,我不是100%确定阵列阵列的数据结构是否是正确的选择。 – user972391

回答

0

我能想到的一件事情就是排序。在MergeObject

实现Comparator接口会给你一个排序列表。所以所有重复的元素将被组合在一起。看看这是否有助于你。