You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

十万级HashMap遍历生成PDF:能否使用Java Stream优化?

使用Java Stream重构你的PDF生成逻辑

当然可以用Java Stream来替代这个for循环,写法会更简洁,也符合现代Java的编程风格,功能和原逻辑完全一致。这里是重构后的代码:

allVillages.values()
           .forEach(village -> genPdf(
               stateCode,
               village.getDistrictCode().toString(),
               village.getBlockCode().toString(),
               village.getVillageCode().toString(),
               village.getVillageNameEnglish(),
               villageFile
           ));

为什么这么写?

  • 你原来的循环里只用到了HashMap中的值(LocationPojo对象),完全没用到键(Integer),所以直接调用values()方法获取所有值的集合,再转成Stream处理,比遍历entrySet()更直接高效。
  • forEach()方法会对每个LocationPojo执行你原来的genPdf调用,和原for循环的执行逻辑完全等价。

可选优化:并行处理提升效率

如果你的genPdf方法是线程安全的(比如每个PDF生成操作互不干扰,villageFile是每个村庄独立的文件而非共享流),还可以用并行Stream来加速10000条记录的处理:

allVillages.values()
           .parallel()
           .forEach(village -> genPdf(
               stateCode,
               village.getDistrictCode().toString(),
               village.getBlockCode().toString(),
               village.getVillageCode().toString(),
               village.getVillageNameEnglish(),
               villageFile
           ));

⚠️ 注意:并行处理前一定要确认genPdf方法及其依赖的资源是线程安全的,避免出现文件写入冲突、数据错乱等问题。

内容的提问来源于stack exchange,提问作者Ankit

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 07:41:10