2017-07-31 195 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接口會給你一個排序列表。所以所有重複的元素將被組合在一起。看看這是否有助於你。