通过比较主列表从另一个列表中删除重复元素

时间:2018-03-27 06:16:26

标签: java list collections

我有两个自定义类列表

public class WiSeConSyncItem{
   int processId=1;//unique
   int syncStatus=0;//variable
}

List<WiSeConSyncItem> mainItems=new ArrayList();

mainItems将迭代并执行相应的API(需要时间)。另一个计时器会将一些数据添加到mainItems

因此,如果我们将第二个列表添加到mainItems,它可能包含重复的项目。所以我想从第二个列表中删除重复的项目并添加到第一个列表。

删除重复功能

public static List<WiSeConSyncItem> removeDuplicate(List<WiSeConSyncItem> syncItems) {
    Set set = new TreeSet(new Comparator<WiSeConSyncItem>() {
        @Override
        public int compare(WiSeConSyncItem o, WiSeConSyncItem o1) {
            if (o.getProcessId() == o1.getProcessId())
                return 0;//to remove duplicate
            else
                return 1;
        }
    });

    set.addAll(syncItems);
    return new ArrayList<>(set);
}
  

我无法从mainItems删除项目,因为其他线程可能正在执行这些对象。   我无法使用SetHashMap,因为这个项目来自另一个sdk。 (是的,我可以用它创建一个新的模型,但请从这个内容建议)

1 个答案:

答案 0 :(得分:0)

如果它们需要唯一且同时访问,为什么不将它们放入ConcurrentHashMap?通过这种方式,您可以避免重复,并且还可以同时添加项目:

Map<Integer,WiSeConSyncItem> db = new ConcurrentHashMap<Integer,WiSeConSyncItem>();
WiSeConSyncItem item = new WiSeConSyncItem();
item.processId=1;
db.put(item.processId, item);