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());
这样处理,速度就相当快啦