我有两个自定义类列表
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
删除项目,因为其他线程可能正在执行这些对象。 我无法使用Set
或HashMap
,因为这个项目来自另一个sdk。 (是的,我可以用它创建一个新的模型,但请从这个内容建议)
答案 0 :(得分:0)
如果它们需要唯一且同时访问,为什么不将它们放入ConcurrentHashMap?通过这种方式,您可以避免重复,并且还可以同时添加项目:
Map<Integer,WiSeConSyncItem> db = new ConcurrentHashMap<Integer,WiSeConSyncItem>();
WiSeConSyncItem item = new WiSeConSyncItem();
item.processId=1;
db.put(item.processId, item);