public static int BULK_COUNT = 2000;
public static <T> List<List<T>> splitList(List<T> oriList,boolean isParallel){
if(oriList.size() <= ESConstant.BULK_COUNT){
List<List<T>> splitList = new ArrayList<>();
splitList.add(oriList);
return splitList;
}
int limit = (oriList.size() + ESConstant.BULK_COUNT - 1) / ESConstant.BULK_COUNT;
if(isParallel){
return Stream.iterate(0, n -> n + 1).limit(limit).parallel().map(a -> oriList.stream().skip(a * ESConstant.BULK_COUNT).limit(ESConstant.BULK_COUNT).parallel().collect(
Collectors.toList())).collect(Collectors.toList());
}else{
final List<List<T>> splitList = new ArrayList<>();
Stream.iterate(0, n -> n + 1).limit(limit).forEach(i -> {
splitList.add(oriList.stream().skip(i * ESConstant.BULK_COUNT ).limit(ESConstant.BULK_COUNT ).collect(Collectors.toList()));
});
return splitList;
}
}
上述方法用于将大集合拆分成若干个小集合的处理思路;
该代码段展示了如何根据预设的批量大小将一个大集合分割成多个小集合。如果集合大小小于或等于批量大小,则直接返回包含整个集合的列表。否则,根据批量大小和是否并行处理,使用Java Stream API进行拆分。如果是并行处理,使用并行流进行拆分;否则,使用传统迭代方式创建子集合。
816

被折叠的 条评论
为什么被折叠?



