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 = new ArrayList<>();
        for (int a = 0; a < devices.length; a++) {
            PushMessageExcel pushMessage = new PushMessageExcel();
            pushMessage.setDeviceToken(devices[a]);
            messages.add(pushMessage);
        } 
        //list按指定长度分割,按500分割
        List<List<PushMessageExcel>> list = splitList(messages, 500);
        //遍历分割结果逐一取出新的list
        for (int i = 0; i < list.size(); i++) {
            System.out.println(list.get(i).toString());
          }   
}
  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Java 8提供了一些新的分割List的方法。在Java 8,我们可以使用Stream API和Lambda表达式来实现分割List的操作。 首先,我们可以使用Stream API的新方法partitioningBy()来将List根据某个条件分两个子集,这两个子集都是List类型。例如,我们可以通过以下代码将一个包含所有整数的List分为两个子集,其一个子集包含所有偶数,另一个子集包含所有奇数: List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10); Map<Boolean, List<Integer>> partionedNumbers = numbers.stream() .collect(Collectors.partitioningBy(n -> n % 2 == 0)); List<Integer> evenNumbers = partionedNumbers.get(true); List<Integer> oddNumbers = partionedNumbers.get(false); 其次,我们还可以使用Stream API的新方法groupingBy()来将List根据某个条件分多个子集,每个子集都是List类型。例如,我们可以通过以下代码将一个包含若干个字符串的List根据它们的长度分为多个子集: List<String> words = Arrays.asList("apple", "banana", "pear", "peach", "grape", "watermelon"); Map<Integer, List<String>> groupedWords = words.stream() .collect(Collectors.groupingBy(String::length)); List<String> threeLetterWords = groupedWords.get(3); List<String> fourLetterWords = groupedWords.get(4); List<String> fiveLetterWords = groupedWords.get(5); 使用以上两种方法,我们可以非常便捷地对List进行分割操作,从而实现更高效、更灵活的数据处理和分析。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值