利用 Function 在业务方法之外,用 Lists.partition(idList, 100) ,进行统一分片。
/**
* 统一分片查询,按200切分
*/
public <T> List<T> splitQuery(List<Long> idList, Function<List<Long>, List<T>> function) {
List<T> resultList = Lists.newArrayList();
for (List<Long> subList : Lists.partition(idList, 200)) {
resultList.addAll(function.apply(subList));
}
return resultList;
// // 或
// return Lists.partition(idList, 200).stream().flatMap(x ->
// function.apply(x).stream()).collect(Collectors.toList()
// );
}
使用:
/**
* 查询Sku列表
*/
public List<SkuDTO> querySkuList(List<Long> skuIdList) {
return splitQuery(skuIdList, subList -> {
// some query(subList);
return new ArrayList<SkuDTO>();
});
}
~_~