使用hashMap优化两次for循环
使用hashMap优化两次for循环
需求:
有一学生表,需要从中分析出每个学校的学生各项数据之和,比如说每个学校的男女数量。
实现:
查出所有记录后,使用Stream的group by对学校进行分组,结果是一个map,键是学校id,值是这个学校的学生列表。
接着循环这个map,外层循环map的key(学校),内层循环所有的学生列表,接着将需要的数据放入学校数据dto列表,每个dto表示一个学校。
这就会导致效率上的问题——每次循环学校的时候,都要重复循环一遍学生列表。
优化:
可以这样优化,新建一个hashMap,以学校的id为key,学校数据dto为值。
只需要循环一次学生列表,获取学校id,判断map中该学校dto是否存在,存在就取出来,不存在就新建并存入map中和放入学校数据dto列表,接着继续修改这个dto(例如累加学生男女数量)。
也就是说利用这个hashMap来临时存储所有的学校id和对应的学校dto数据,就可以避免多次对列表的for循环了。