Java三层嵌套Stream调用flatMap获取字符串集合的代码优化咨询
优化方案
你原来的写法冗余点在于提前做了多次嵌套集合收集,后续再统一展开,直接在流处理环节用flatMap替换内层的map即可省去中间收集、再反复展开的逻辑,优化后代码如下:
import static java.util.stream.Collectors.toSet; // 核心逻辑 Set<List<String>> results = countries.stream() .flatMap(country -> titles.stream() .flatMap(title -> games.stream() .map(game -> Arrays.asList(game, country + "_" + title + "_" + game)))) .collect(toSet());
逻辑说明
- 优化后的写法和你给出的三层for循环逻辑完全等价,省去了原代码中3次
collect(toList())生成中间嵌套集合、后续3次flatMap展开的冗余操作,代码更简洁的同时也减少了不必要的对象生成开销。 - 每层
flatMap的作用是直接将内层流输出的元素合并到上层流中,不需要先把内层流的元素收集为列表再做展开。
内容的提问来源于stack exchange,提问作者Alex Man
相关产品推荐
相关产品推荐

