Java中List按指定长度分割成多个List

项目背景:一个APP需要对6万余人同时推送消息,但是消息推送能力每次只有500,所以需要将一个包含6万多元素的List按500的长度为一组分割成多个List。

代码:

//list按指定长度分割方法

private List<List<PushMessageExcel>> splitList(List<PushMessageExcel> messagesList, int groupSize) {
    int length = messagesList.size();
    // 计算可以分成多少组
    int num = (length + groupSize - 1) / groupSize; // TODO
    List<List<PushMessageExcel>> newList = new ArrayList<>(num);
    for (int i = 0; i < num; i++) {
        // 开始位置
        int fromIndex = i * groupSize;
        // 结束位置
        int toIndex = (i + 1) * groupSize < length ? (i + 1) * groupSize : length;
        newList.add(messagesList.subList(fromIndex, toIndex));
    }
    return newList;
}

//该接口为消息推送接口,只展示使用List分割部分代码。

@RequestMapping(path = "send")
public void send( @RequestParam(required = true) String[] devices) throws IOException {
        ////前端入参为一个数组,先将数组转list
        List<PushMessageExcel> messages 
Java 中,如果你想将 List 划分多个 List,每个 List 的大小基于指定长度,你可以采用循环迭代的方式逐个添加元素到新的列表中。这里有一个简单的示例: ```java import java.util.ArrayList; import java.util.List; public class ListSplitter { public static void main(String[] args) { // 原始的 List List<String> originalList = new ArrayList<>(); // 添加一些元素 originalList.add("Element1"); originalList.add("Element2"); originalList.add("Element3"); originalList.add("Element4"); originalList.add("Element5"); int sublistLength = 3; // 指定每个新子列表的长度 // 创建新的 List 列表用于存放结果 List<List<String>> subLists = new ArrayList<>(); // 分割原始 List for (int i = 0; i < originalList.size(); ) { List<String> subList = new ArrayList<>(); // 新建一个子列表 while (i + sublistLength <= originalList.size()) { subList.addAll(originalList.subList(i, i + sublistLength)); i += sublistLength; // 更新索引 } if (!subList.isEmpty()) { // 如果还有剩余元素,添加到子列表 subList.addAll(originalList.subList(i, originalList.size())); } subLists.add(subList); // 将子列表加入结果列表 } // 打印分割后的子列表 for (List<String> slicedList : subLists) { System.out.println("Sliced List: " + slicedList); } } } ``` 在这个例子中,`sublistLength`变量决定了每个子列表的长度。循环遍历原列表,并根据长度条件创建新的子列表。如果到达了原列表的结尾还没有填充满当前子列表,就直接把剩下的元素添加进去。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值