比较两个列表并获取差异
2022-09-02 19:24:03
我有两个列表。它们包含不同类型的对象,但两种类型都包含id和name,id是我比较的。列表 1 从 DB 获取,列表 2 从前端发送。
我需要做的是遍历它们,并找到新添加的列表项和已删除的列表项。
我能够做到这一点,但问题是它看起来很难看。
假设我有一个名为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()));
}
}
这有效,我已经测试过了。有没有更好的解决方案?我正在考虑使用Sets,这样我就可以比较它们,这有什么缺点吗?