java list批处理工具类
用于处理大LIST分批处理,避免内存溢出。
public final class BatchOperator {
private BatchOperator() {
}
/**
* 批量操作
*
* @param pageSize
* @param list
* @param callback
* @param <T>
* @return
* @throws ServiceException
*/
public static <T> int operate(int pageSize, List<T> list, Callback callback) throws ServiceException {
int total = list.size();
int pages = total <= pageSize ? 1 : total % pageSize == 0 ? total / pageSize : total / pageSize + 1;
try {
for (int i = 0; i < pages; i++) {
if ((i + 1) * pageSize <= total) {
callback.execute(list.subList(i * pageSize, (i + 1) * pageSize));
} else {
callback.execute(list.subList(i * pageSize, total));
}
}
return 1;
} catch (Exception e) {
throw new ServiceException(ExceptionCode.SYSTEM_ERROR, e);
}
}
public static interface Callback<T> {
void execute(List<T> list);
}
}
//使用方式
BatchOperator.operate(200, agentInfoList, (itemList) -> {
dao.update(itemList);
});
posted on 2019-04-23 11:15 xiaogui918 阅读(469) 评论(0) 编辑 收藏 举报