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-将集合按指定个数分为多个集合的主要内容,如果未能解决你的问题,请参考以下文章

Java基础之集合

laravel collection 分类

将字符串按指定的符号分割为集合或数组

将字符串按指定的符号分割为集合或数组

将字符串按指定的符号分割为集合或数组

redis 简单的命令分为哪些