我有两个列表。它们包含不同类型的对象,但是两种类型都包含id和name,而id是我要比较的内容。 列表一是从数据库中获取的,而列表二是从前端发送的。
我需要做的是循环遍历它们,并找出哪个列表项是新添加的,哪个是被删除的。
我已经能够做到了,但问题在于它看起来很丑陋。
假设我有一个名为NameDTO的对象,它可以具有id和name。列表二填充了这种类型的对象。
这就是我所做的:
final ArrayList<NamedDTO> added = new ArrayList<>();
final ArrayList<NamedDTO> removed = new ArrayList<>();
for(NamedDTO listTwoObject : listTwo) {
boolean contained = false;
for(SomeObject listOneObject : listOne) {
if(listTwoObject.getId().equals(listOneObject.getId()) {
contained = true;
}
}
if(!contained) {
added.add(listTwoObject);
}
}
for(SomeObject listOneObject : listOne) {
boolean contained = false;
for(NamedDTO listTwoObject : listTwo) {
if(listTwoObject.getId().equals(listOneObject.getId()) {
contained = true;
}
}
if(!contained) {
removed.add(new NamedDTO(listOneObject.getId(), listOneObject.getName()));
}
}
这个方法可行,我已经测试过了。 有更好的解决方案吗? 我在考虑使用Set以便进行比较,这样做有什么缺点吗?