//获取当前sku的规格 List<Pair<Long, String>> pairList = skuList.get(0).getSpecList().stream().map(item -> Pair.of(item.getSpecId(), item.getSpecValueId())).distinct().collect(Collectors.toList()); //过滤sku属性值 List<SpuSpecValueVo> spuSpecList = respVo.getSpuSpecList(); List<SpuSpecValue> spuSpecValues = spuSpecList.stream(). map(SpuSpecValueVo::getSpecValues). flatMap(Collection::stream). filter(spuSpecValueVo -> pairList.contains(Pair.of(spuSpecValueVo.getSpecId(), String.valueOf(spuSpecValueVo.getSpecValueId())))). collect(Collectors.toList()); Map<Long, SpuSpecValue> spuSpecValueMap = spuSpecValues.stream().collect(Collectors.toMap(SpuSpecValue::getSpecId, Function.identity(), (v1, v2) -> v1)); spuSpecList.stream(). peek(spuSpecValueVo -> spuSpecValueVo.setSpecValues(Lists.newArrayList(spuSpecValueMap.get(spuSpecValueVo.getId())))). collect(Collectors.toList());
时间: 2024-04-13 15:24:54 浏览: 63
这段代码是用于获取当前sku的规格信息,并根据规格信息过滤sku属性值。首先,代码从skuList中获取第一个sku的规格列表,然后将规格id和规格值id组成的Pair进行去重,得到pairList。
接下来,代码从respVo中获取spuSpecList,即商品的规格列表。然后,通过flatMap将每个规格的规格值列表展开为一个流,再通过filter过滤掉不符合pairList中规格id和规格值id的规格值。最后,将过滤后的规格值列表收集为一个新的列表spuSpecValues。
接着,代码将spuSpecValues转换为一个Map,以规格id为key,规格值为value。然后,再次遍历spuSpecList,通过peek操作将每个规格的规格值列表设置为只包含符合条件的规格值。最后,将处理后的spuSpecList收集为一个新的列表。
这段代码的作用是根据当前sku的规格信息来过滤商品的规格属性值,以便在页面展示时只显示与当前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 Map<String, 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); } } map.put("duplicateList", duplicateList); map.put("uniqueList", uniqueList); return map; }是什么意思
这段代码的作用是比较两个 `GoodsSku` 对象列表 `list1` 和 `list2` 中的 `skuAttribute` 字段的值,将比较结果保存到一个 `Map` 中并返回。
具体实现逻辑如下:
1. 创建一个 `Map` 对象 `map` 用于保存比较结果,其中包含两个键值对:`"duplicateList"` 和 `"uniqueList"`。`"duplicateList"` 对应的值是一个 `List`,表示重复的 `skuAttribute` 字段的值所对应的 `GoodsSku` 对象列表;`"uniqueList"` 对应的值也是一个 `List`,表示不重复的 `skuAttribute` 字段的值所对应的 `GoodsSku` 对象列表。
2. 创建两个 `Set` 对象 `set1` 和 `set2`,分别用于存储 `list1` 和 `list2` 中的 `skuAttribute` 字段的值按 ":" 分割后排序后的结果,以去重。
3. 分别遍历 `list1` 和 `list2`,将每个 `GoodsSku` 对象的 `skuAttribute` 字段的值按 ":" 分割后排序后的结果存入 `set1` 和 `set2` 中。
4. 遍历 `list1` 中的每个 `GoodsSku` 对象,将其 `skuAttribute` 字段的值按 ":" 分割后排序后的结果与 `set2` 进行比较,如果存在相同的值,则将该 `GoodsSku` 对象加入到 `duplicateList` 中,否则加入到 `uniqueList` 中。
5. 将 `duplicateList` 和 `uniqueList` 分别作为值,放入 `map` 中对应的键值对中。
6. 返回 `map` 对象。
综上所述,该方法的作用是比较两个 `GoodsSku` 对象列表中的 `skuAttribute` 字段的值,将结果分类保存到 `Map` 对象中,并返回该对象。
阅读全文