Java 实现将List平均分成若干个集合
作者:after95 发布时间:2023-10-16 21:36:59
标签: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));
}
}
来源:https://blog.csdn.net/after95/article/details/79959274


猜你喜欢
- HttpWebRequest 是一个Http 请求类,继承于 WebRequest。WebRequest 是一个抽象类,能够对统一资源标识符
- 一、位运算的分类与展现效果java位运算可以分为左移和右移,其中右移还有无符号右移。 java只对整型位移,可以分为int体系和long体系
- 接上回上一篇我们简单介绍了基于SpringBoot实现简单的Web开发,本节来看Web开发中必不可少的内容—&m
- 本文实例讲述了C#基于正则表达式删除字符串中数字或非数字的方法。分享给大家供大家参考,具体如下:/// 去掉字符串中的数字public st
- Windows Data Type.NET Data TypeBOOL, BOOLEANBoolean or Int32BSTRString
- 1、Java字符串在 Java 中字符串被作为 String 类型的对象处理。 String 类位于 java.lang 包中,默认情况下该
- merge标签合并标记需要两个或两个以上的列表作为参数,并把它们合并在一起,如下所示:<s:merge var="myMer
- 本文实例为大家分享了C#实现简单点餐系统的具体代码,供大家参考,具体内容如下实现简单点餐系统剖析1、设计界面(给菜品的序号(index),名
- 前言又没什么好的思路,还是随便写一些,所以这次就来整点活。我们都知道Activity的跳转拥有默认的跳转动画,或者把这个默认的动画给取消,就
- 一 .前言某年某月某天,同事说需要一个文件排他锁功能,需求如下:(1)写操作是排他属性(2)适用于同一进程的多线程/也适用于多进程的排他操作
- 什么是ContentType?我们知道浏览器可以处理各种各样的内容,比如:HTML、XML、JPG、Flash等等,那么浏览器是如何区分它们
- 一、AtomicReference 基本使用我们这里再聊起老生常谈的账户问题,通过个人银行账户问题,来逐渐引入 AtomicReferenc
- BigDecimal的舍入模式(RoundingMode)BigDecimal.divide方法中必须设置roundingMode,不然会报
- mybatis 报错显示sql中有两个limit使用mybatis进行分页查询时,打印的查询sql中带有两个limit。经过审查:原因是由于
- 前端模板框架为Bootstrap,系统分为前台和后台。后台主要为管理员角色,功能有:商品类型管理、商品管理、订单管理、会员管理、管理员管理等
- 比如,现在有一些图形,需要计算他们的面积,计算面积的方法都不一样,可以这么做声明一个抽象类//基类 abstrac
- Java平台的垃圾收集机制显著提高了开发者的效率,但是一个实现糟糕的垃圾收集器可能过多地消耗应用程序的资源。在Java虚拟机性能优化系列的第
- 本文实例讲述了Java Swing实现JTable检测单元格数据变更事件的方法。分享给大家供大家参考,具体如下:在JTable的初级教程中往
- 虽然Android给我们提供了众多组件,但是使用起来都不是很方便,我们开发的APK都有自己的风格,如果使用了系统自带的组件,总是觉得和应用的
- 1. 简单工厂介绍简单工厂有一个具体的工厂类,可以生产不同的产品,属于创建型设计模式。注意:简单工厂模式 不属于23种设计模式之列2. 简单