数据量大的 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条 .collect(Collectors.toList()->组成一个toList
List<ReceiptMethodIdAndNameBean> paperEntityList = paperNoList.stream().skip(a * number).limit(number).collect(Collectors.toList());
//doSomething(); eg:数据库操作
//举例分批输出
for (ReceiptMethodIdAndNameBean receiptMethodIdAndNameBean : paperEntityList) {
System.out.println(receiptMethodIdAndNameBean.getLockboxId());
}
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 = Lists.newArrayList(1, 2, 3, 4, 5, 6, 7, 8);
List<List<Integer>> subs = ListUtils.partition(intList, 3);