在刚刚的方法基础上,增加如果list2中的数据list1中没有就执行insert,如果list1中有而list2中没有,就将list1中的数据执行delete
时间: 2024-03-09 10:45:02 浏览: 59
CSharp_List.zip_C# list_C#中list_C#中list的用法_C#怎么引用List_c# list
5星 · 资源好评率100%
可以在原有的方法基础上进行修改,增加对list2中新增和list1中删除的处理。具体代码如下:
```
public List<GoodsSku> compareList(List<GoodsSku> list1, List<GoodsSku> list2) {
Map<String, List<GoodsSku>> map = new HashMap<String, List<GoodsSku>>();
List<GoodsSku> duplicateList = new ArrayList<>(); // 重复的skuAttribute字段的值
List<GoodsSku> uniqueList = new ArrayList<>(); // 不重复的skuAttribute字段的值
// 将list1和list2的skuAttribute字段的值分割、排序后存入set中
Set<String> set1 = new HashSet<>();
Set<String> set2 = new HashSet<>();
list1.forEach(item -> set1.add(Arrays.stream(item.getSkuAttribute().split(":")).sorted().collect(Collectors.joining(":"))));
list2.forEach(item -> set2.add(Arrays.stream(item.getSkuAttribute().split(":")).sorted().collect(Collectors.joining(":"))));
// 遍历list1,如果list2中包含当前元素,则说明该skuAttribute字段的值重复,将其加入结果集中;否则加入uniqueList中
for (GoodsSku sku : list1) {
String sortedSku = Arrays.stream(sku.getSkuAttribute().split(":")).sorted().collect(Collectors.joining(":"));
if (set2.contains(sortedSku)) {
duplicateList.add(sku);
} else {
uniqueList.add(sku);
}
}
// 遍历list2,如果list1中不包含当前元素,则说明该skuAttribute字段的值为新增,将其插入到数据库中
for (GoodsSku sku : list2) {
String sortedSku = Arrays.stream(sku.getSkuAttribute().split(":")).sorted().collect(Collectors.joining(":"));
if (!set1.contains(sortedSku)) {
sku.insert();
uniqueList.add(sku);
}
}
// 遍历list1,如果list2中不包含当前元素,则说明该skuAttribute字段的值需要删除,将其从数据库中删除
for (GoodsSku sku : list1) {
String sortedSku = Arrays.stream(sku.getSkuAttribute().split(":")).sorted().collect(Collectors.joining(":"));
if (!set2.contains(sortedSku)) {
sku.deleteById();
}
}
map.put("duplicateList", duplicateList);
map.put("uniqueList", uniqueList);
return list1;
}
```
修改后的方法会先遍历list2,找出其中新增的sku信息并插入到数据库中,然后再遍历list1,找出其中需要删除的sku信息并从数据库中删除。
阅读全文