1.问题来源
有的时候我们需要将一个大的List集合分割成多个小的List集合以便进行操作。比如批量查询、新增、或者删除的时候,如果数量太大,可能会导致诸如sql语句过长、执行缓慢等问题。这个时候我们需要将一个大的List集合分割成多个小的List集合以便分开操作,可以有效提升执行效率。
2.集合分组
这里是将一个大的List集合分割成多个小的List集合的实现方法,代码如下:
/**
* 分割List集合 将一个大的List集合分割成多个小的List集合
*
* @param <T> 指定List的数据类型
* @param oldList 原始集合
* @param batchSize 设置每个小集合的长度
* @return 分割后的指定数据类型的数据集合,每个元素都是分割后的List集合
*/
public static <T> List<List<T>> splitList(List<T> oldList, int batchSize) {
if (batchSize < 1) {
return null;
}
List<List<T>> result = new ArrayList<>();
int size = oldList.size();
int count = (size + batchSize - 1) / batchSize;
for (int i = 0; i < count; i++) {
int fromIndex = i * batchSize;
int toIndex = (i + 1) * batchSize > size ? size : (i + 1) * batchSize;
List<T> subList = oldList.subList(fromIndex, toIndex);
result.add(subList);
}
return result;
}
3.测试
编写一个测试方法,来验证是否可行,方法如下:
public static void main(String[] args) {
List<String> list = new ArrayList<>();
for (int i = 0; i < 16; i++) {
list.add("数据" + (i + 1));
}
System.out.println("原始集合中的数据,共" + list.size() + "条信息:");
System.out.println(list);
System.out.println();
// 分割List集合 将一个大的List集合分割成多个小的List集合
List<List<String>> newList = splitList(list, 3);
System.out.println("分割后的各个集合中的数据:");
for (int i = 0, newListSiez = newList.size(); i < newListSiez; i++) {
System.out.println("第" + (i + 1) + "个小集合中的数据,共" + newList.get(i).size() + "条:" + newList.get(i));
}
}
执行结果如下:
4.完整工具类
import java.util.ArrayList;
import java.util.List;
/**
* <h5>描述:List集合操作相关工具类</h5>
*
*/
public class ToolList {
public static void main(String[] args) {
List<String> list = new ArrayList<>();
for (int i = 0; i < 16; i++) {
list.add("数据" + (i + 1));
}
System.out.println("原始集合中的数据,共" + list.size() + "条信息:");
System.out.println(list);
System.out.println();
// 分割List集合 将一个大的List集合分割成多个小的List集合
List<List<String>> newList = splitList(list, 3);
System.out.println("分割后的各个集合中的数据:");
for (int i = 0, newListSiez = newList.size(); i < newListSiez; i++) {
System.out.println("第" + (i + 1) + "个小集合中的数据,共" + newList.get(i).size() + "条:" + newList.get(i));
}
}
/**
* 分割List集合 将一个大的List集合分割成多个小的List集合
*
* @param <T> 指定List的数据类型
* @param oldList 原始集合
* @param batchSize 设置每个小集合的长度
* @return 分割后的指定数据类型的数据集合,每个元素都是分割后的List集合
*/
public static <T> List<List<T>> splitList(List<T> oldList, int batchSize) {
if (batchSize < 1) {
return null;
}
List<List<T>> result = new ArrayList<>();
int size = oldList.size();
int count = (size + batchSize - 1) / batchSize;
for (int i = 0; i < count; i++) {
int fromIndex = i * batchSize;
int toIndex = (i + 1) * batchSize > size ? size : (i + 1) * batchSize;
List<T> subList = oldList.subList(fromIndex, toIndex);
result.add(subList);
}
return result;
}
}
标签:分割,int,batchSize,List,分组,集合,size
From: https://blog.51cto.com/abcd/6306635