欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

两种List集合分页方式

程序员文章站 2022-04-16 09:18:51
两种List集合分页方式,你学费了吗~...

平凡也就两个字: 懒和惰;
成功也就两个字: 苦和勤;
优秀也就两个字: 你和我。
跟着我从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);
  }

      测试结果:

两种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);
  }

      测试结果:

两种List集合分页方式

 

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

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

两种List集合分页方式

 

本文地址:https://blog.csdn.net/IT_Most/article/details/109532512

相关标签: java 集合