if(StringUtils.isNotEmpty(ygjc.getJoinQuestion())){
List<String> joinQuestionTaskUUIDList =
ygjcMapper.getJoinQuestionTaskUUIDS(ygjc);
if(CollectionUtil.isNotEmpty(joinQuestionTaskUUIDList)){
//每500个提交一次
if(joinQuestionTaskUUIDList.size()<500){
queryWrapper.in(YgjcEntity::getUuid, joinQuestionTaskUUIDList);
}else {
// 指定大小
int maxNum = 500;
// 切分次数
int step = (joinQuestionTaskUUIDList.size() + maxNum - 1) / maxNum;
List<List<String>> collectList =
Stream.iterate(0, n -> n + 1)//初始值0,按照n+1迭代
.limit(step)//限制次数
.parallel()//并行操作,提高效率-多核并行
.map(//流中的每一个元素都按照下面的方式映射
a ->
joinQuestionTaskUUIDList.stream()
.skip(a * maxNum)//跳过前面的元素
.limit(maxNum)//限制流中的元素
.parallel()//并行
.collect(Collectors.toList()))//收集流元素
.collect(Collectors.toList());//收集规则
for (List<String> joinQuestionTaskUUIDList1 : collectList) {//遍历
try {
queryWrapper.in(YgjcEntity::getUuid, joinQuestionTaskUUIDList1);
}catch (Exception e){
log.error("该批次异常,进行一下批次");
}
}
}
}
}
数据量大时,采用stream流进行分批操作
最新推荐文章于 2024-03-08 16:50:42 发布