package com.inco.core.util;
import com.inco.entity.pub.pub.Dbb;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
/**
* List 分页截断工具类
* @author dingqiming
* @Date: 2019-12-18 16:47
* @param <T>
*/
public class ListSplitIterator<T> implements Iterator<List<T>> {
protected List<T> originData;
private int position;
//默认每页 1000 条
private int pageSize = 1000;
public ListSplitIterator(List<T> originData) {
if (originData == null) {
return;
}
this.originData = originData;
position = 0; //初始化位置为 0
}
public ListSplitIterator(List<T> originData, int pageSize) {
this(originData);
if (pageSize <= 0) {
throw new IllegalArgumentException("pageSize 需要输入一个大于 0 的值");
}
this.pageSize = pageSize;
}
@Override
public boolean hasNext() {
return originData != null && !originData.isEmpty() && position < originData.size();
}
@Override
public List<T> next() {
if (hasNext()) {
int start = position;
int end = position + pageSize;
if (end >= originData.size()) {
end = originData.size();
}
List<T> current = originData.subList(start, end);
position = end;
return current;
}
return null;
}
@Override
public void remove() {
throw new RuntimeException("未实现 remove 方法");
}
public int size() {
return originData == null ? 0 : (originData.size() - 1) / pageSize + 1;
}
public List<T> get(int index) {
if (originData == null) return null;
int start = index * pageSize;
int end = (index + 1) * pageSize;
if (end >= originData.size()) {
end = originData.size();
}
return originData.subList(start, end);
}
/**
* 获取当前位置
*
* @return
*/
public long position() {
return position;
}
/**
* 使用方法
* @param args
*/
public static void main(String[]args){
// 获取数据
List<Dbb> batches = new ArrayList();
// 每批数据的大小
int batchCount = 500;
// 构建分割
ListSplitIterator<Dbb> batchListSplitIterator = new ListSplitIterator<>(batches, batchCount);
// 迭代每一批数据
while (batchListSplitIterator.hasNext()){
List<Dbb> batchSubList = batchListSplitIterator.next();
}
}
}