定义一个线程池
ForkJoinPool forkJoinPool = new ForkJoinPool(15);
假如有两个list集合数据
//获取表中已存在的部类大中小类
//集合倒灌成set集合进行差异比较,取差集
List<DivAndPtyProductInfo> divAndPtyInfoTable = scmBlPty3NumReviseDao.getAllDivAndPty(tenantNumId, dataSign);
Set<DivAndPtyProductInfo> divAndPtyProductInfoSet = divAndPtyInfoTable.stream().collect(toSet());
//获取basic表中所有的部类大中小类
List<DivAndPtyProductInfo> divAndPtyInfoBasic = scmInnerService.getBasicAllDivAndPtyInfo(tenantNumId, dataSign);
Set<DivAndPtyProductInfo> divAndPtyInfoBasicSet = divAndPtyInfoBasic.stream().collect(toSet());
//获取两个集合的差集
Sets.SetView<DivAndPtyProductInfo> divAndPtyInfos = Sets.difference(divAndPtyInfoBasicSet, divAndPtyProductInfoSet);
//通过lambda表达式取差集
List<DivAndPtyProductInfo> divAndPtyInfoTable =
//获取basic表中所有的部类大中小类
List<DivAndPtyProductInfo> divAndPtyInfoBasic = scmInnerService.getBasicAllDivAndPtyInfo(tenantNumId, dataSign);
List<DivAndPtyProductInfo> divAndPtyInfos = divAndPtyInfoBasic.stream().filter(info -> !divAndPtyInfoTable.contains(info)).collect(toList());
使用异步线程
List<CompletableFuture<CategoryModifySettingDivAndPtyInfo>> futures= divAndPtyInfos.stream().map(info -> CompletableFuture.supplyAsync(() -> {
CategoryModifySettingDivAndPtyInfo entity = new CategoryModifySettingDivAndPtyInfo();
Long divNumId = info.getDivNumId();
Long pty1NumId = info.getPty1NumId();
Long pty2NumId = info.getPty2NumId();
Long pty3NumId = info.getPty3NumId();
DivAndPtyProduct product = scmInnerService.getDivAndPtyNameById(tenantNumId, dataSign, divNumId, pty1NumId, pty2NumId, pty3NumId);
entity.setDivNumId(divNumId);
entity.setDivName(product.getDivName());
entity.setPty1NumId(pty1NumId);
entity.setPty1Name(product.getPty1Name());
entity.setPty2NumId(pty2NumId);
entity.setPty2Name(product.getPty2Name());
entity.setPty3NumId(pty3NumId);
entity.setPty3Name(product.getPty3Name());
return entity;
},forkJoinPool)).collect(toList());
从CompletableFuture对象中获取获取
List<CategoryModifySettingDivAndPtyInfo> collect = futures.stream().map(CompletableFuture::join).filter(Objects::nonNull).collect(toList());
释放资源
forkJoinPool.shutdown();