java代码递归比较两个collection集合的差异,并返回差异的属性
时间: 2023-09-23 18:03:43 浏览: 80
下面是一个 Java 代码示例,用于递归比较两个 Collection 集合的差异,并返回差异的属性:
```java
import java.util.*;
public class CollectionComparator {
public static void main(String[] args) {
List<Map<String, Object>> list1 = new ArrayList<>();
List<Map<String, Object>> list2 = new ArrayList<>();
Map<String, Object> map1 = new HashMap<>();
map1.put("id", "1");
map1.put("name", "John");
map1.put("age", 25);
map1.put("gender", "male");
Map<String, Object> map2 = new HashMap<>();
map2.put("id", "2");
map2.put("name", "Jane");
map2.put("age", 30);
map2.put("gender", "female");
Map<String, Object> map3 = new HashMap<>();
map3.put("id", "3");
map3.put("name", "Bob");
map3.put("age", 35);
map3.put("gender", "male");
list1.add(map1);
list1.add(map2);
list1.add(map3);
Map<String, Object> map4 = new HashMap<>();
map4.put("id", "1");
map4.put("name", "John");
map4.put("age", 25);
map4.put("gender", "male");
Map<String, Object> map5 = new HashMap<>();
map5.put("id", "2");
map5.put("name", "Jane");
map5.put("age", 30);
map5.put("gender", "female");
list2.add(map4);
list2.add(map5);
Collection<Map<String, Object>> added = new ArrayList<>();
Collection<Map<String, Object>> removed = new ArrayList<>();
Collection<Map<String, Object>> updated = new ArrayList<>();
compareCollections(list1, list2, added, removed, updated);
System.out.println("Added: " + added);
System.out.println("Removed: " + removed);
System.out.println("Updated: " + updated);
}
public static void compareCollections(Collection<Map<String, Object>> c1, Collection<Map<String, Object>> c2,
Collection<Map<String, Object>> added, Collection<Map<String, Object>> removed,
Collection<Map<String, Object>> updated) {
for (Map<String, Object> map1 : c1) {
boolean found = false;
for (Map<String, Object> map2 : c2) {
if (map1.get("id") == map2.get("id")) {
found = true;
if (!map1.equals(map2)) {
updated.add(map1);
}
break;
}
}
if (!found) {
removed.add(map1);
}
}
for (Map<String, Object> map2 : c2) {
boolean found = false;
for (Map<String, Object> map1 : c1) {
if (map2.get("id") == map1.get("id")) {
found = true;
break;
}
}
if (!found) {
added.add(map2);
}
}
}
}
```
这个例子中,我们使用了两个 List 集合来模拟需要比较的数据。我们将两个集合传递给 `compareCollections()` 方法,该方法会递归比较两个集合并返回差异的属性。`compareCollections()` 方法的实现如下:
1. 对于第一个集合中的每个 Map 对象,我们在第二个集合中查找是否存在相同的 id 属性。如果存在,则比较两个 Map 对象是否相等,如果不相等,则将 Map 对象添加到 updated 集合中。如果不存在,则将 Map 对象添加到 removed 集合中。
2. 对于第二个集合中的每个 Map 对象,我们在第一个集合中查找是否存在相同的 id 属性。如果不存在,则将 Map 对象添加到 added 集合中。
最后,我们打印出所有添加、删除和更新的 Map 对象。
阅读全文