十万级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
相关产品推荐
相关产品推荐

