public List<Sku> querySkusBySpuId(Long spuId) { QueryWrapper<Sku> queryWrapper = new QueryWrapper<>(); queryWrapper.eq("spu_id",spuId); List<Sku> skus = this.skuMapper.selectList(queryWrapper); skus.forEach(s -> { Stock stock = this.stockMapper.selectById(s.getId()); s.setStock(stock.getStock()); }); return skus; }
时间: 2024-04-11 13:33:09 浏览: 21
这段代码是用于根据商品ID查询商品库存的方法。首先,创建了一个QueryWrapper对象,用于构建查询条件。然后,通过eq方法设置查询条件为"spu_id = spuId"。接着,调用skuMapper的selectList方法执行查询,并将结果保存到skus列表中。
接下来,对skus列表进行遍历,对每个sku对象执行以下操作:根据sku的ID使用stockMapper查询对应的库存信息,并将库存数量设置到sku对象的stock属性中。
最后,返回查询到的skus列表。
相关问题
JsonUtil.parseObject()怎么使用,假如要转Result<List<SkuInfoDto>>
JsonUtil.parseObject()是用来将JSON字符串转换为Java对象的方法。如果要将JSON字符串转换成Result<List<SkuInfoDto>>对象,可以按照如下代码进行尝试:
```java
String jsonStr = "{\"code\":200,\"msg\":\"success\",\"data\":[{\"id\":1,\"name\":\"s1\",\"price\":1.11},{\"id\":2,\"name\":\"s2\",\"price\":2.22}]}";
TypeReference<Result<List<SkuInfoDto>>> typeRef = new TypeReference<Result<List<SkuInfoDto>>>() {};
Result<List<SkuInfoDto>> result = JsonUtil.parseObject(jsonStr, typeRef);
List<SkuInfoDto> skuInfos = result.getData();
for(SkuInfoDto skuInfo: skuInfos) {
System.out.println(skuInfo.getId() + " " + skuInfo.getName() + " " + skuInfo.getPrice());
}
```
其中,TypeReference<Result<List<SkuInfoDto>>>作为反序列化的类型引用,可以指定泛型类型的具体类型。同时,可以通过调用反序列化后的Result对象的getData()方法,获取其中的List<SkuInfoDto>。最后,遍历List<SkuInfoDto>,输出每一条sku信息的id,name和price即可。
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字段进行排序后再进行比较。