java中集合的分割

该博客主要介绍Java中集合分割的两种操作。一是使用`subList`方法获取集合中指定下标的分集合;二是借助`com.google.common.collect`包下的`Lists.partition`方法,根据指定大小将大集合分为多个小集合,还给出了Maven引入依赖的示例。


一、获取集合中指定下标的分集合
public class TestDemo {
    public static void main(String[] args) {
        ArrayList<String> list = new ArrayList<String>();
        list.add("a");
        list.add("b");
        list.add("c");
        list.add("d");

//取序号为1,2 不包括序号3的集合
        System.out.println(list.subList(1, 3));
list.subList(起始下标,结束下标),截取中间部分作为一个新集合
    }
}
二、根据指定大小将一个大集合分为多个小集合(适用于批量处理中集合的分割)
com.google.common.collect包下的Lists.partition方法。
maven引入依赖:
    <dependency>
        <groupId>com.google.guava</groupId>
        <artifactId>guava</artifactId>
        <version>21.0</version>
    </dependency>
public class ListsPartition {
    public static void main(String[] args) {
        List<String> strings=Lists.newArrayList("a","b","c","d","e","f","g","h","i");
        List<List<String>> lists=Lists.partition(strings,4);
        System.out.println(lists);
    }
}

Java 中有一些工具类可用于分割 List 集合。 `ListSplitter` 类可将列表分割成多个批次。以下是其代码实现: ```java import java.util.ArrayList; import java.util.List; public class ListSplitter { /** * 将列表分割成多个批次。 * * @param <E> 列表元素类型 * @param list 输入的元素列表 * @param batchSize 批次大小 * @return 分割后的批次列表 */ public static <E> List<List<E>> splitList(List<E> list, int batchSize) { List<List<E>> batches = new ArrayList<>(); for (int i = 0; i < list.size(); i += batchSize) { int end = Math.min(i + batchSize, list.size()); batches.add(new ArrayList<>(list.subList(i, end))); } return batches; } } ``` 该类有一个静态方法 `splitList`,它接收一个列表和批次大小作为参数,返回分割后的批次列表 [^2]。 `BatchProcessor` 类也是一个集成批量切割处理工具类,它可以将 List 按指定大小切割并对每个批次进行处理。以下是其代码实现: ```java import java.util.List; public class BatchProcessor<T> { public void processInBatches(List<T> dataList, Consumer<List<T>> batchProcessor, int batchSize) { List<T> batch; for (int i = 0; i < dataList.size(); i += batchSize) { // 截取当前批次的数据 batch = dataList.subList(i, Math.min(i + batchSize, dataList.size())); // 执行单次推送操作(例如网络请求、数据库插入等) batchProcessor.accept(batch); } } // 定义一个函数式接口,用于处理每个批次的数据 @FunctionalInterface public interface Consumer<T> { void accept(T t); } } ``` 使用示例如下: ```java import java.util.List; // 假设 PushHdOrderDTO 类已定义 class PushHdOrderDTO {} public class Main { public static void main(String[] args) { List<PushHdOrderDTO> pushHdOrderDTOS = null; // 初始化列表 BatchProcessor.Consumer<List<PushHdOrderDTO>> pushBatchToServer = list -> { try { // 这里是推送方法 String hdInfo = pushOrder(); } catch (Exception e) { // 假设 log 已正确初始化 java.util.logging.Logger log = java.util.logging.Logger.getLogger(Main.class.getName()); log.severe("同步推送异常"); } }; new BatchProcessor<PushHdOrderDTO>().processInBatches(pushHdOrderDTOS, pushBatchToServer, 10); } private static String pushOrder() { return null; } } ``` 该类通过 `processInBatches` 方法将传入的 List 按指定的 `batchSize` 进行切割,并使用传入的 `batchProcessor` 对每个批次进行处理 [^3]。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值