List<CompletableFuture<Boolean>> cfs = new ArrayList<>();
List<Map<String,String>> list1 = new ArrayList<>();
if (CollectionUtils.isNotEmpty(list)) {
List<List<Map<String,String>>> lists = batchAddRecords(list1);
List<CompletableFuture<Boolean>> collect = lists.stream().map(lis -> CompletableFuture.supplyAsync(() -> {
AjaxResult r = save(list1);
log.info("save -> 保存了{}条数据,返回值为{}", lis.size(), r);
return Boolean.TRUE;
}, ForkJoinPool.commonPool())).collect(Collectors.toList());
cfs.addAll(collect);
}
List<Map<String,String>> list2 = new ArrayList<>();
if (CollectionUtils.isNotEmpty(list2)) {
List<List<Map<String,String>>> lists = batchAddRecords(list2);
List<CompletableFuture<Boolean>> collect = lists.stream().map(lis -> CompletableFuture.supplyAsync(() -> {
AjaxResult r = save(list2);
log.info("updateBatchInfo -> 保存了{}条数据,返回值为{}", lis.size(), r);
return Boolean.TRUE;
}, ForkJoinPool.commonPool())).collect(Collectors.toList());
cfs.addAll(collect);
}
try {
if (CollectionUtils.isNotEmpty(cfs)) {
CompletableFuture.allOf(cfs.toArray(new CompletableFuture[cfs.size()])).join();
for (CompletableFuture<Boolean> cf : cfs) {
cf.get();
}
}
} catch (InterruptedException | ExecutionException e) {
log.error("错误", e);
throw new IllegalArgumentException("导入失败,请重新导入");
}
private <T> List<List<T>> batchAddRecords(List<T> list) {
int maxValue = 500;
int limit = (list.size() + maxValue - 1) / maxValue;
List<List<T>> resultList = new ArrayList<>();
Stream.iterate(0, n -> n + 1).limit(limit).forEach(i -> {
resultList.add(list.stream().skip(i * maxValue).limit(maxValue).collect(Collectors.toList()));
});
return resultList;
}