Stream⼤数据量List分批处理java8
数据量⼤的 List中,如果要操作数据库 ,可以分批次,⽐如⼀次500的数据
public static void main(String[] args){
//数据模拟
List<ReceiptMethodIdAndNameBean> paperNoList =new ArrayList();
for(int i =0; i <1000; i++){
ReceiptMethodIdAndNameBean selectItemBean =new ReceiptMethodIdAndNameBean();
selectItemBean.setLockboxId(String.valueOf(i));
paperNoList.add(selectItemBean);
}
//⼀次500条
int number =500;
int limit =(paperNoList.size()+ number -1)/ number;
//分成limit次发请求到数据库,in()操作时可以把多条数据分割成多组请求
Stream.iterate(0, n -> n +1).limit(limit).forEach(a ->{
//获取后⾯1000条中的前500条
// 拿到这个参数的流的(a * applyIdSelectSize)后⾯的数据 .limit(applyIdSelectSize)->后⾯数据的500条 .List()->组成⼀个toLi st
List<ReceiptMethodIdAndNameBean> paperEntityList = paperNoList.stream().skip(a * number).limit(number).List());
java stream//doSomething(); eg:数据库操作
//举例分批输出
for(ReceiptMethodIdAndNameBean receiptMethodIdAndNameBean : paperEntityList){
System.out.LockboxId());
}
System.out.println("======================================================");
});
}
使⽤google guava对List进⾏分割
public static void main(String[] args){
//模拟模拟
List<Integer> listDemo = Arrays.asList(1,2,3,4,5,6,7);
List<List<Integer>> partition = Lists.partition(listDemo,3);
partition.stream().forEach(list ->{
System.out.println("-------------------------");
list.stream().forEach(a ->{
System.out.println(a);
});
});
}
使⽤apache common collection
List<Integer> intList = wArrayList(1,2,3,4,5,6,7,8);
List<List<Integer>> subs = ListUtils.partition(intList,3);
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论