如何筛选出价格总和超过200的游戏分类分组?
实现筛选价格总和超200的游戏分类分组的方案
你现在的代码已经完成了按分类统计价格总和的基础功能,要筛选出总和超过200的分组,这里有两个实用的实现方案,你可以根据自己的编码习惯选择:
方案一:先分组求和,再过滤结果
这个方法逻辑最直观,先完成你原本的分组求和操作,再对生成的Map做二次过滤,只保留价格总和大于200的条目。
修改后的代码如下:
public static Map<String, Double> getSumOfPricesPerCategoryOver() { List<Videogame> videogamesList = videogames; // 第一步:按分类分组并计算价格总和 Map<String, Double> categoryPriceSum = videogamesList .stream() .collect(Collectors.groupingBy(Videogame::getCategoria, Collectors.summingDouble(Videogame::getPrecio))); // 第二步:过滤出总和超过200的分类 return categoryPriceSum.entrySet() .stream() .filter(entry -> entry.getValue() > 200.0) .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue)); }
优点是步骤清晰,每一步的职责明确,新手也能快速理解和调试。
方案二:用collectingAndThen在流式操作中完成过滤
如果你想把所有逻辑整合到一个流式调用里,可以用Collectors.collectingAndThen,它允许我们在分组求和的结果上直接执行过滤操作,让代码更紧凑。
代码示例:
public static Map<String, Double> getSumOfPricesPerCategoryOver() { List<Videogame> videogamesList = videogames; return videogamesList .stream() .collect(Collectors.collectingAndThen( // 先执行分组求和 Collectors.groupingBy(Videogame::getCategoria, Collectors.summingDouble(Videogame::getPrecio)), // 再对分组结果做过滤 sumMap -> sumMap.entrySet() .stream() .filter(entry -> entry.getValue() > 200.0) .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue)) )); }
这个方案把所有操作封装在一个collect调用里,适合偏好链式流式操作的场景,代码整体更简洁。
两种方案都能满足你的需求,你可以根据代码可读性要求和团队编码风格来选择~
内容的提问来源于stack exchange,提问作者aisak
相关产品推荐
相关产品推荐

