ArrayUtil-将集合按指定个数分为多个集合
Posted wcis
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ArrayUtil-将集合按指定个数分为多个集合相关的知识,希望对你有一定的参考价值。
使用场景
发起十万百万级数据量调取时,防止接口超时,并发,数据库承压问题时,采取分批次查询
业务场景片段
List<List<String>> result = ArrayUtil.splitList(sapSkuNos,50);
Iterator<List<String>> iterator = result.iterator();
while (iterator.hasNext()){
List<SkuBarcodeDto> sbarList = null;
List<SkuTaxcodeDto> staxList = null;
List<String> splitSapSkuNos = iterator.next();
//批量查询spec
skuList = skuReadService.queryBySapSkuNos(splitSapSkuNos);
if(CollectionUtil.isNotEmpty(skuList)){
for(SkuDto dto : skuList) {
skuIds.add(dto.getId());
}
//批量查询skubarcode
sbarList = skuBarcodeReadService.queryBySkuIds(skuIds);
staxList = skuTaxcodeReadService.queryBySapSkuNos(splitSapSkuNos);
}
barList.addAll(sbarList);
taxList.addAll(staxList);
}
} catch (Exception e) {
logger.error("调用商品中心-批量查询接口失败:", e);
throw new XException().setShowText("调用商品中心-批量查询接口失败");
工具类
import java.util.ArrayList;
import java.util.List;
/**
* ArrayUtil工具类
* @author wanminglei
* @date 2019年11月29日
*/
public class ArrayUtil {
public static void main(String[] args) {
List<Integer> list = new ArrayList();
for (int i = 1; i <= 16; i++) {
list.add(i);
}
List<List<Integer>> result = splitList(list, 3);
System.out.println("分隔后List个数:\t" + result.size());
}
/**
* 按指定大小,分隔集合,将集合按规定个数分为n个部分
*
* @param list
* @param len
* @return
*/
public static <T> List<List<T>> splitList(List<T> list, int len) {
if (list == null || list.size() == 0 || len < 1) {
return null;
}
//返回结果
List<List<T>> result = new ArrayList<List<T>>();
//传入集合长度
int size = list.size();
//分隔后的集合个数
int count = (size + len - 1) / len;
for (int i = 0; i < count; i++) {
List<T> subList = list.subList(i * len, ((i + 1) * len > size ? size : len * (i + 1)));
result.add(subList);
}
return result;
}
}
以上是关于ArrayUtil-将集合按指定个数分为多个集合的主要内容,如果未能解决你的问题,请参考以下文章