根据list集合对list集合进行过滤

发布于:2023-01-01 ⋅ 阅读:(507) ⋅ 点赞:(0)
public class WebPriceInfo {
   private String packageType; //规格
   private String packageQuality;
   private String price;
   private String productId; //产品id
}
public class EuSize {
    private String  productId; //产品id
    private String size; //规格
}

过滤掉已存在的同一产品中已存在的规格

产品所有规格集合
List<WebPriceInfo> webpAllList;
需要剔除产品规格的集合
List<EuSize> euSizeList;

最开始是这么处理的

List<WebPriceInfo> infos = webpAllList.stream().filter(p -> euSizeList.stream().noneMatch(any -> any.getProductId().equals(p.getProductId()) && any.getSize().equals(p.getPackageType()))).collect(Collectors.toList());

循环过滤,、两个集合的数据量都较大,处理速度非常慢
产品唯一id加上产品规格是唯一值的时候(不是唯一,可以过滤一下),将所有数据转成map,用 产品id+规格作为唯一key,在进行过滤处理
 

List<EuSize> euSizeList = pdSer.listSizeInfo();
Map<String, WebPriceInfo> collect = webpAllList.stream().collect(Collectors.toMap(k -> k.getProductId() + k.getPackageType(), Function.identity(),(key1,key2) -> key1, LinkedHashMap::new));
euSizeList.forEach(item -> {
   if(collect.get(item.getProductId() + item.getSize()) != null) {
      collect.remove(item.getProductId() + item.getSize());
   }
});
List<WebPriceInfo> infos = new ArrayList<>(collect.values());

这样处理,速度就相当快啦


网站公告

今日签到

点亮在社区的每一天
去签到