public List<GoodsSku> compareList(List<GoodsSku> list1, List<GoodsSku> list2) { // 将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(":")))); // 遍历list2,如果list1中不包含当前元素,则说明该skuAttribute字段的值为新增,将其插入到数据库中 for (GoodsSku sku : list2) { String sortedSku = Arrays.stream(sku.getSkuAttribute().split(":")).sorted().collect(Collectors.joining(":")); if (!set1.contains(sortedSku)) { sku.insert(); } } // 遍历list1,如果list2中不包含当前元素,则说明该skuAttribute字段的值需要删除,将其从数据库中删除 for (GoodsSku sku : list1) { String sortedSku = Arrays.stream(sku.getSkuAttribute().split(":")).sorted().collect(Collectors.joining(":")); if (!set2.contains(sortedSku)) { sku.deleteById(); } } return list1; }
时间: 2024-04-26 20:23:33 浏览: 7
这段代码是用来比较两个商品SKU列表的,它会比较每个SKU的skuAttribute字段的值,将其分割并排序后存储到两个Set中。然后,它会遍历第二个SKU列表,如果第一个SKU列表中不包含当前元素,则说明该SKU的skuAttribute字段的值为新增,它会将其插入到数据库中。接着,它会遍历第一个SKU列表,如果第二个SKU列表中不包含当前元素,则说明该SKU的skuAttribute字段的值需要删除,它会将其从数据库中删除。最后,该方法会返回第一个SKU列表。
相关问题
/** * sku信息修改 * * @param list1 已录入库的sku信息 * @param list2 新组合的sku信息 * @return */ 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); } } for (GoodsSku sku : uniqueList) {//将不同的sku信息写入库 if (null == sku.getId()) { sku.insert(); } else { sku.deleteById(); } } map.put("duplicateList", duplicateList); map.put("uniqueList", uniqueList); return list1; }
这是一个Java方法,用于比较两个List<GoodsSku>对象,找出其中重复和不重复的skuAttribute值,并将不重复的sku信息写入数据库中。该方法接收两个List<GoodsSku>类型的参数list1和list2,分别表示已录入库的sku信息和新组合的sku信息。比较过程中,首先将每个sku的skuAttribute字段的值分割、排序后存入set中,以便后续比较。然后遍历list1,如果list2中包含当前元素,则说明该skuAttribute字段的值重复,将其加入结果集中;否则加入uniqueList中。最后将uniqueList中的sku信息写入数据库。该方法返回值为List<GoodsSku>类型的list1,表示已录入库的sku信息。
public List<String> compareList(List<GoodsSku> list1, List<GoodsSku> list2) { List<String> result = new ArrayList<>(); // 将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(":")))); // 遍历set1,如果set2中包含当前元素,则说明该skuAttribute字段的值重复,将其加入结果集中 for (String sku : set1) { if (set2.contains(sku)) { result.add(sku); } } return result; }把这段代码改成返回的是整个goodsSku的实体list
好的,可以参考下面的代码实现:
```
public List<GoodsSku> compareList(List<GoodsSku> list1, List<GoodsSku> list2) {
List<GoodsSku> result = new ArrayList<>();
// 将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字段的值重复,将其加入结果集中
for (GoodsSku sku : list1) {
String sortedSku = Arrays.stream(sku.getSkuAttribute().split(":")).sorted().collect(Collectors.joining(":"));
if (set2.contains(sortedSku)) {
result.add(sku);
}
}
return result;
}
```
注意,这里需要将遍历的对象从set改成list1,因为我们需要返回的是list1中与list2重复的GoodsSku实体对象。同时,需要在遍历list1时对skuAttribute字段进行排序后再进行比较。