Java List如何分批
在Java中,List是一个常用的集合类型,用于存储一组对象。有时候我们需要将一个大的List分割成多个小的List,以便于处理和使用。本文将介绍如何使用Java对List进行分批操作。
方式一:使用循环遍历
最简单的方法是使用循环遍历List,并使用subList
方法将原List切割成指定大小的子List。下面是一个示例代码:
import java.util.ArrayList;
import java.util.List;
public class ListBatchExample {
public static void main(String[] args) {
// 创建一个包含10个元素的List
List<Integer> originalList = new ArrayList<>();
for (int i = 1; i <= 10; i++) {
originalList.add(i);
}
// 指定批大小
int batchSize = 3;
// 分批处理
int startIndex = 0;
int endIndex = batchSize;
while (startIndex < originalList.size()) {
if (endIndex > originalList.size()) {
endIndex = originalList.size();
}
List<Integer> batchList = originalList.subList(startIndex, endIndex);
// 处理子List
System.out.println("Processing batch: " + batchList);
// 更新索引
startIndex = endIndex;
endIndex += batchSize;
}
}
}
上述代码中,我们首先创建一个包含10个元素的List。然后指定了批大小为3,即每个子List包含3个元素。接下来,我们使用循环遍历的方式,将原List切分成多个子List,并进行处理。
运行上述代码,可以得到如下输出:
Processing batch: [1, 2, 3]
Processing batch: [4, 5, 6]
Processing batch: [7, 8, 9]
Processing batch: [10]
可以看到,原List被成功分成了4个子List,每个子List的大小为3,最后一个子List的大小为1。
方式二:使用Apache Commons Collections库
除了使用循环遍历,我们还可以使用Apache Commons Collections库中的工具类ListUtils
来进行List分批。这个方法更加简洁和方便。下面是一个示例代码:
import org.apache.commons.collections4.ListUtils;
import java.util.ArrayList;
import java.util.List;
public class ListBatchExample {
public static void main(String[] args) {
// 创建一个包含10个元素的List
List<Integer> originalList = new ArrayList<>();
for (int i = 1; i <= 10; i++) {
originalList.add(i);
}
// 指定批大小
int batchSize = 3;
// 使用ListUtils.partition方法进行分批
List<List<Integer>> batchList = ListUtils.partition(originalList, batchSize);
// 遍历处理子List
for (List<Integer> batch : batchList) {
// 处理子List
System.out.println("Processing batch: " + batch);
}
}
}
上述代码中,我们首先使用Apache Commons Collections库中的ListUtils.partition
方法将原List分成了多个指定大小的子List。然后,我们可以直接遍历这些子List,并进行处理。
运行上述代码,可以得到与方式一相同的输出结果。
方式三:使用Java 8 Stream API
如果你使用的是Java 8及以上版本,你还可以使用Stream API来实现List分批。下面是一个示例代码:
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.IntStream;
public class ListBatchExample {
public static void main(String[] args) {
// 创建一个包含10个元素的List
List<Integer> originalList = new ArrayList<>();
for (int i = 1; i <= 10; i++) {
originalList.add(i);
}
// 指定批大小
int batchSize = 3;
// 使用IntStream.range方法生成索引
List<List<Integer>> batchList = IntStream.range(0, originalList.size())
.boxed()
.collect(Collectors.groupingBy(index -> index / batchSize))
.values()
.stream()
.map(indices -> indices.stream().map(originalList::get).collect(Collectors.toList()))
.collect(Collectors.toList());
// 遍历处理子List
for (List<Integer> batch : batchList) {
// 处理子List
System.out.println("Processing batch: " + batch