两种List集合分页方式

2 篇文章 0 订阅

平凡也就两个字: 懒和惰;
成功也就两个字: 苦和勤;
优秀也就两个字: 你和我。
跟着我从0学习JAVA、spring全家桶和linux运维等知识,带你从懵懂少年走向人生巅峰,迎娶白富美!
关注微信公众号【 IT特靠谱 】,每天都会分享技术心得~

 

两种List集合分页方式

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

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

 

1 普通分页

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

1.1 手动分页

  //分页大小
  private static final int PAGE_SIZE = 5;

  /**
   * 手动分页
   */
  private static void splitList(List<String> list) {
    int listSize = list.size();
    int page = getPage(listSize);
    int fromIndex;
    int toIndex;
    //分页拆分集合
    List<List<String>> 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<String> 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) {
    List<String> list = Lists.newArrayList("1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11");
    //普通分页
    splitList(list);
  }

      测试结果:

  

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

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

2.1 添加guava工具包依赖

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

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

  //分页大小
  private static final int PAGE_SIZE = 5;

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

 

2.3 测试guava分页

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

      测试结果:

 

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

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

 

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

IT_Most

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值