使用stream().filter快速循环
最开始导入Excel的内容
for(int rowNum=1;rowNum<=sheet.getLastRowNum();rowNum++){
//查询内容......
period= periodMapper.selectPeriodByNames(args);
//再次查询内容....
userBind = userBindService.selectUserBindByIdcardNo(orderNumber);
}
导入一份500行的Excel,每个查询都要走500多次,上传文件慢就不说了,还容易出现超时的问题,使用stream().filter 优化代码
//在循环外一次性查询所有内容
List<ExamScore> scoreList=examScoreMapper.selectExamScoreByUser();
//查询.....
List<Certificate> cerList=certificateMapper.selectCertificateByUser();
for(int rowNum=1;rowNum<=sheet.getLastRowNum();rowNum++){
//循环内直接取值,不需要每次查数据库(i.getOrderNum代表要查的字段,id代表传入的值)
List<PeriodUserVo> list=scoreList.stream().filter(i->i.getOrderNum().equals(id)).collect(Collectors.toList());
//取第一条
User user=list.get(0);
}
其他用法:
//在集合中查询用户名为huxiansen的集合
List<User> userList = list.stream().filter(user -> "huxiansen".equals(user.getUsername())).collect(Collectors.toList());
//在集合中查询出第一个用户密码为123456的用户
Optional<User> user = list.stream().filter(userTemp -> "123456".equals(userTemp.getPassword())).findFirst();
必须要JDK1.8以上才能使用