java分批次处理List集合数据
解决方法:
1、用法
以下代码假如datas有10000个元素,每次分批处理1000个元素,那么以下datasub.stream().forEach会执行10次。
List<HashMap<String,Object>> datas=null;//要分片处理的集合
Collection<Collection<HashMap<String,Object>>> datasub= BatchUtil.subCollection(datas,1000);
datasub.stream().forEach(x->{
//业务处理代码
});
2、工具类
import java.util.Collection;
import java.util.stream.Collectors;
import java.util.stream.Stream;
public class BatchUtil {
private static Integer countStep(Integer size, Integer maxNum) {
return (size + maxNum - 1) / maxNum;
}
public static <T> Collection<Collection<T>> subCollection(Collection<T> collections, int maxNum){
int limit = countStep(collections.size(), maxNum);
Collection<Collection<T>> splitCollection = Stream.iterate(
0, n -> n + 1).limit(limit).parallel().map(
a -> collections.stream().skip(a * maxNum).limit(maxNum).parallel()
.collect(Collectors.toList())).collect(Collectors.toList());
return splitCollection;
}
}