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编辑  收藏  举报

导航