给一个大的 List 分区(根据给定的最大子列表Size均衡的分割出相应的子List)

本文介绍了一种将大型List均衡分割成多个子List的方法,以适应接口限制,例如一次最多请求1000个数据。通过计算平均桶大小并使用Guava的Lists.partition(),可以高效地分割列表,进而利用多线程和CountDownLatch加速数据获取。
摘要由CSDN通过智能技术生成

核心思想:就是计算出相对均等的桶大小,然后利用Guava的Lists.partition()方法来分区。

应用场景:请求的接口只允许一次请求1000个数据,而实际上要请求的数据超过1000,此时就可以利用次方法先分割;然后,再利用多线程和CountDownLatch工具来并发获取数据,从而提高响应速度。

好了,话不多说,请看代码: 

import com.google.common.collect.Lists;
import org.apache.commons.collections.CollectionUtils;

import java.util.List;

/**
 * @author fanggang
 */
public class ListUtil {

    /**
     * 尽可能的等分一个List为N个List。
     *
     * @param sourceList           被等分的List
     * @param maxPartitionCapacity 最大分片容量
     * @param <T>                  List的元素类型
     * @return 返回一个分割好的二维List
     */
    public static <T> List<List<T>> splitList(List<T> sourceList, int maxPartitionCapacity) {
        if (sourceList == null || sourceList.isEmpty() || maxPartitionCapacity <= 0) {
            return Lists.newArrayList();
        }

       
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值