Java 实现将List平均分成若干个集合
作者:after95 时间:2023-10-16 21:36:59
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
标签:Java,List,平均,集合
![](/images/zang.png)
![](/images/jiucuo.png)
猜你喜欢
c#实现将pdf转文本的示例分享
2023-07-19 14:54:23
IntelliJ IDEA基于SpringBoot如何搭建SSM开发环境的步骤详解
2022-11-24 12:10:39
![](https://img.aspxhome.com/file/2023/9/79349_0s.png)
java8 如何实现分组计算数量和计算总数
2022-05-05 01:17:32
不知道面试会不会问Lambda怎么用(推荐)
2021-07-27 21:37:30
Java swing 图像处理多种效果实现教程
2022-08-16 20:15:08
![](https://img.aspxhome.com/file/2023/0/77960_0s.jpg)
C#中使用UDP通信的示例
2022-11-19 21:09:07
![](https://img.aspxhome.com/file/2023/0/106520_0s.png)
使用JavaBean根据指定条件设置属性值默认值方式
2023-03-23 04:03:25
如何在Java SpringBoot项目中配置动态数据源你知道吗
2021-07-23 11:10:08
![](https://img.aspxhome.com/file/2023/5/73105_0s.png)
Spring Boot配置线程池拒绝策略的场景分析(妥善处理好溢出的任务)
2022-08-05 07:12:24
海量数据去重排序bitmap(位图法)在java中实现的两种方法
2022-10-10 17:27:36
Java实现List集合转树形结构的示例详解
2021-11-11 10:48:33
如何使用SpringSecurity保护程序安全
2022-09-08 19:57:50
Android开发笔记之Android中数据的存储方式(二)
2022-12-04 01:05:55
![](https://img.aspxhome.com/file/2023/2/123232_0s.jpg)
SpringBoot与SpringCache概念用法大全
2022-05-24 01:35:44
![](https://img.aspxhome.com/file/2023/1/128851_0s.png)
Spring底层事务原理解析
2021-11-25 05:40:29
Android游戏开发学习之引擎用法实例详解
2023-09-26 16:01:57
java中拼接字符串的5种方法效率对比
2022-01-08 05:46:18
![](https://img.aspxhome.com/file/2023/5/65155_0s.jpg)
Android 自定义弹性ListView控件实例代码(三种方法)
2022-04-14 15:00:33
Android应用中使用SharedPreferences类存储数据的方法
2022-06-11 20:27:08
![](https://img.aspxhome.com/file/2023/8/96768_0s.gif)
详解MyBatis逆向工程
2021-12-12 02:38:04
![](https://img.aspxhome.com/file/2023/3/64433_0s.png)