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