Java根据条件查找重复项并覆盖/更新重复对象

时间:2017-07-31 04:08:01

标签: java excel arraylist data-structures duplicates

我有一个包含以下示例数据的电子表格。

data sample

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

我不想使用Set,因为我想保留重复项。我想循环列表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中。 列出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 个答案:

答案 0 :(得分:0)

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

在MergeObject上实现Comparator接口将为您提供一个排序列表。因此,所有重复元素将组合在一起。看看这对你有帮助。