如何基于查找表向PGRatingConfig的Rating列表中补充缺失条目
首先修正你给出的查找表代码错误:HashMap没有add方法,需要使用put方法添加键值对。
实现逻辑
对每个查询得到的PGRatingConfig实例,先提取已有的产品组ID集合做存在性校验,再遍历查找表补全缺失的产品组配置即可:
- 给
PGRatingConfig、Rating类补充私有字段对应的getter、setter方法 - 遍历所有
PGRatingConfig实例,提取其Rating列表中已有的产品组ID存入Set - 遍历产品组查找表的所有值(产品组名称),缺失的条目新建
Rating对象设置默认值后加入列表
代码示例
// 修正后的产品组查找表 Map<String, String> pgLookupMap = new HashMap<>(); pgLookupMap.put("1", "Soap"); pgLookupMap.put("2", "Cleaner"); // 假设pgRatingConfigList是从数据库查询得到的结果 List<PGRatingConfig> pgRatingConfigList = queryFromDB(); for (PGRatingConfig config : pgRatingConfigList) { List<Rating> ratingList = config.getRating(); // 兼容不可变列表场景,统一转成可变ArrayList List<Rating> mutableRatingList = new ArrayList<>(ratingList); // 提取已有产品组ID Set<String> existIds = mutableRatingList.stream() .map(Rating::getId) .collect(Collectors.toSet()); // 补全缺失条目 for (String pgName : pgLookupMap.values()) { if (!existIds.contains(pgName)) { Rating rating = new Rating(); rating.setId(pgName); rating.setValue("4"); mutableRatingList.add(rating); } } config.setRating(mutableRatingList); }
注意事项
- 如果需要保持产品组的排列顺序和查找表插入顺序一致,把查找表实现类换成
LinkedHashMap即可 - 默认值如果需要调整,直接修改
setValue的入参即可
内容的提问来源于stack exchange,提问作者diaop
相关产品推荐
相关产品推荐

