list 分页_两种List集合分页方式

本文介绍两种处理大量List集合数据的有效方法:手动分页和利用Guava工具进行分页。这两种方法有助于避免数据库锁表或宕机风险,通过将数据分批处理减少内存开销并提升性能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

平凡也就两个字: 懒和惰;成功也就两个字: 苦和勤;优秀也就两个字: 你和我。跟着我从0学习JAVA、spring全家桶和linux运维等知识,带你从懵懂少年走向人生巅峰,迎娶白富美!每一篇文章都是心得总结,跟我学习你就是大牛!

两种List集合分页方式

     工作中我们有时会遇到这种情况:我们需要保存一批List集合数据到数据库,但是由于list集合中的数据较多,可能会占用较大数据库内存,最终可能导致数据库锁表或宕机。

     这种情况下,我们需要对数据库进行优化或者对list集合数据进行分批次处理。减小数据库的内存开销,提高性能。

1 普通分页

      大多数同学会用下面的方式对list集合数据进行拆分分页。

1.1 手动分页

//分页大小  private static final int PAGE_SIZE = 5;  /**   * 手动分页   */  private static void splitList(Listlist) {    int listSize = list.size();    int page = getPage(listSize);    int fromIndex;    int toIndex;    //分页拆分集合    List> pageList = new ArrayList<>();    for (int i = 0; i < page; i++) {      fromIndex = i * PAGE_SIZE;      toIndex = (i + 1) * PAGE_SIZE;      if (toIndex > listSize) {        toIndex = listSize;      }      //截取一段集合数据      List subList = list.subList(fromIndex, toIndex);      pageList.add(subList);    }    //循环打印看看    pageList.forEach(System.out::println);  }  /**   * 获取分页   * @param listSize 总list大小   */  private static Integer getPage(int listSize) {    int page = listSize / PAGE_SIZE;    int surplus = listSize % PAGE_SIZE;    if (0 != surplus) {      page++;    }    return page;  }

1.2 测试手动分页

  public static void main(String[] args) {    Listlist = Lists.newArrayList("1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11");    //普通分页    splitList(list);  }
String< list = Lists.newArrayList(\"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\", \"8\", \"9\", \"10\", \"11\");\n    //普通分页\n    splitList(list);\n  }","classes":[]}"   >

      测试结果:

b09954a85c1c9196d0f453b3d4d17b1f.png

2  使用guava工具对list进行拆分分页

      本人推荐用现有的工具类来处理,可以减小代码量,提高代码可读性!

2.1 添加guava工具包依赖

  <properties>    <version.guava>21.0version.guava>  properties>        <dependency>      <groupId>com.google.guavagroupId>      <artifactId>guavaartifactId>      <version>${version.guava}version>    dependency>
!--guava通用工具包--dependencygroupId/groupIdartifactId/artifactIdversion/version/dependency

2.2 使用guava工具对list进行拆分分页

//分页大小  private static final int PAGE_SIZE = 5;  /**   * 使用guava工具对list进行拆分分页   */  private static void partitionList(Listlist) {    //分页拆分集合    List<List> pageList = Lists.partition(list, PAGE_SIZE);    //循环打印看看    pageList.forEach(System.out::println);  }

2.3 测试guava分页

  public static void main(String[] args) {    Listlist = Lists.newArrayList("1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11");    //guava工具对list进行拆分    partitionList(list);  }

      测试结果:

2d5e0c378be72ac6ebfa76f5a55d92dd.png

      可见条条道路通罗马,但是站在巨人的肩膀上,何乐而不为呢!上面两种方法孰是孰非一目了然,你会用那种呢?

      如果对你有疑问或需要技术支持,关注公众号联系我吧~

21066c764cf225fe75b9774fe859bb7a.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值