Java 实现将List平均分成若干个集合

 更新时间:2020年08月18日 09:11:19   作者:after95  
这篇文章主要介绍了Java 实现将List平均分成若干个集合,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

1.初衷是由于调用银行接口的批量处理接口时,每次最多只能处理500条数据,但是当数据总数为510条时。我又不想第一次调用处理500条,第二次调用处理10条数据,我想要的是每次处理255条数据。

下面展示的是我的处理方法

2.写了一个简单的ListUtils:

package com.example.springboottest.common.util;
 
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
 
import com.google.common.collect.Lists;
/**
 * List 工具类
 * @author Neo 
 * @date 2018年4月16日13:13:37
 */
public class ListUtils {
 
  /**
   * 将一个List均分成n个list,主要通过偏移量来实现的
   *
   * @param source 源集合
   * @param limit 最大值
   * @return
   */
  public static <T> List<List<T>> averageAssign(List<T> source, int limit) {
    if (null == source || source.isEmpty()) {
      return Collections.emptyList();
    }
    List<List<T>> result = new ArrayList<>();
    int listCount = (source.size() - 1) / limit + 1;
    int remaider = source.size() % listCount; // (先计算出余数)
    int number = source.size() / listCount; // 然后是商
    int offset = 0;// 偏移量
    for (int i = 0; i < listCount; i++) {
      List<T> value;
      if (remaider > 0) {
        value = source.subList(i * number + offset, (i + 1) * number + offset + 1);
        remaider--;
        offset++;
      } else {
        value = source.subList(i * number + offset, (i + 1) * number + offset);
      }
      result.add(value);
    }
    return result;
  }
  public static void main(String[] args) {
    List list = new ArrayList();
    for (int i = 0; i < 65; i++) {
      list.add(i);
    }
    List<List> result = averageAssign(list, 15);
    result.forEach(l -> {
      l.forEach(i ->
          System.out.print(i + "\t")
      );
      System.out.println();
    });
    System.out.println("====================================================");
    result = averageAssign(list, 20);
    result.forEach(l -> {
      l.forEach(i ->
          System.out.print(i + "\t")
      );
      System.out.println();
    });
 
    System.out.println("====================================================");
    // Guava 实现不平均分组
    result = Lists.partition(list ,100);
        result.forEach(l -> {
      l.forEach(i ->
          System.out.print(i + "\t")
      );
      System.out.println();
    });
  }
}

3.展示一下测试结果:

补充知识:Java8 Lambda 分割List

我就废话不多说了,大家还是直接看代码吧~

/**
 * @author caishen
 * @version 1.0
 * @className CollectionUtils
 * @date 2019/5/23 11:54
 * 自分で書いたコードの各行を担当する
 * @dis 切割list工具类
 **/
public class CollectionUtils {

  public static <T> List<List<T>> divide(List<T>origin , int size){
    if(Assert.isEmpty(origin)){
      return Collections.emptyList();
    }

    int block = (origin.size() + size -1) / size;
    return IntStream.range(0,block).
        boxed().map(i->{
          int start = i*size;
          int end = Math.min(start + size,origin.size());
          return origin.subList(start,end);
    }).collect(Collectors.toList());
  }

  public static void main(String[] args) {
    System.out.println(divide(Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10), 3));
  }
}

以上这篇Java 实现将List平均分成若干个集合就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • IDEA设置字体随鼠标滚动放大缩小的实现

    IDEA设置字体随鼠标滚动放大缩小的实现

    这篇文章主要介绍了IDEA设置字体随鼠标滚动放大缩小的实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-01-01
  • 解决shiro 定时监听器不生效的问题 onExpiration不调用问题

    解决shiro 定时监听器不生效的问题 onExpiration不调用问题

    这篇文章主要介绍了解决shiro 定时监听器不生效的问题 onExpiration不调用问题。具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-07-07
  • Java实现获取客户端真实IP方法小结

    Java实现获取客户端真实IP方法小结

    本文给大家汇总介绍了2种使用java实现获取客户端真实IP的方法,主要用于获取使用了代理访问的来访者的IP,有需要的小伙伴可以参考下。
    2016-03-03
  • 一文彻底弄懂零拷贝原理以及java实现

    一文彻底弄懂零拷贝原理以及java实现

    零拷贝(英语: Zero-copy) 技术是指计算机执行操作时,CPU不需要先将数据从某处内存复制到另一个特定区域,下面这篇文章主要给大家介绍了关于零拷贝原理以及java实现的相关资料,需要的朋友可以参考下
    2021-08-08
  • Java中的Runnable,Callable,Future,FutureTask的比较

    Java中的Runnable,Callable,Future,FutureTask的比较

    这篇文章主要介绍了Java中的Runnable,Callable,Future,FutureTask的比较的相关资料,需要的朋友可以参考下
    2017-02-02
  • Java数据存储的“双子星”对决(Map和Set的区别)

    Java数据存储的“双子星”对决(Map和Set的区别)

    文章主要介绍了Java中Map和Set两种数据结构的定义、实现、方法及应用场景,Map用于存储键值对,键唯一,值可重复;Set用于存储唯一元素,无序,两者都提供了丰富的操作方法,如添加、删除、查找等,感兴趣的朋友一起看看吧
    2025-02-02
  • SpringBoot多环境配置教程详解

    SpringBoot多环境配置教程详解

    当开发真实的项目时,可能会遇到不同的环境,不同的环境所需要的配置内容也会不尽相同,所以,掌握多环境配置还是非常有必要的。本文为大家准备了SpringBoot多环境配置教程,需要的可以参考下
    2022-06-06
  • 自定义application.yml配置项方式

    自定义application.yml配置项方式

    这篇文章主要介绍了自定义application.yml配置项方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-07-07
  • Java使用Servlet生成验证码图片

    Java使用Servlet生成验证码图片

    这篇文章主要为大家详细介绍了Java使用Servlet生成验证码图片,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-08-08
  • SSM框架+Plupload实现分块上传大文件示例

    SSM框架+Plupload实现分块上传大文件示例

    这篇文章主要介绍了SSM框架+Plupload实现分块上传示例(Spring+SpringMVC+MyBatis+Plupload),将用户选中的文件(可多个)分隔成一个个小块,依次向服务器上传,有兴趣的可以了解一下。
    2017-03-03

最新评论