首页/开发/代码质量与评审速查/手法:Replace Loop with Pipeline(管道取代循环)
重构手法62 条

手法:Replace Loop with Pipeline(管道取代循环)

用 map/filter/reduce 等管道操作表达集合处理:过滤、转换、聚合各自成段,意图比手工循环更直接;管道链过长时切分为命名阶段。

形态filter → map → collect/reduce
收益声明式表达意图,减少索引与临时变量
注意调试断点与短路的差异

示例

示例
// 循环版
List<String> names = new ArrayList<>();
for (Office o : offices) if (o.isChina()) names.add(o.city());

// 管道版
return offices.stream()
    .filter(Office::isChina)
    .map(Office::city)
    .toList();

易错点

  • 管道里塞多行 lambda:可读性反而不如循环
  • 忽略副作用与短路语义差异:findFirst 等操作的行为需核对

数据来源与参考

  • 《重构》第 2 版 · 第 8 章(Replace Loop with Pipeline)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌