最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java 集合實現分頁的方法(業(yè)務代碼實現分頁)

 更新時間:2025年02月07日 10:57:08   作者:初夏0811  
在Java開發(fā)中,有些場景比較復雜,受限制,不好在sql查詢層面實現分頁,需要在查詢的list結果后,將list分頁返回,如何實現呢,帶著這個問題一起通過本文學習吧

一、前言

在Java開發(fā)中,有些場景比較復雜,受限制,不好在sql查詢層面實現分頁,需要在查詢的list結果后,將list分頁返回,如何實現呢?

二、代碼實現

1、假設有一個 list集合,元素如下:

ArrayList<Integer> list = Lists.newArrayList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);

2、使用 subList 實現分頁:

/**
 *@Description: subList 分頁
 * <br> 1. 起始位置邊界值處理: 當前頁碼 <= 0 情況處理; 當前頁碼 > 最大頁碼 情況處理
 * <br> 2. 終止位置邊界值處理: 當前頁碼 <= 0 情況處理; 終止位置 <= 總記錄數  情況處理
 * @param pageSize 每頁顯示的數量
 * @param pageNum  當前頁碼
 */
private List<?> subList(ArrayList<?> list, int pageSize, int pageNum) {
    int count = list.size(); // 總記錄數
    // 計算總頁數
    int pages = count % pageSize == 0 ? count / pageSize : count / pageSize + 1;
    // 起始位置
    int start = pageNum <= 0 ? 0 : (pageNum > pages ? (pages - 1) * pageSize : (pageNum - 1) * pageSize);
    // 終止位置
    int end = pageNum <= 0 ? (pageSize <= count ? pageSize : count) : (pageSize * pageNum <= count ? pageSize * pageNum : count);
    return list.subList(start, end);
}

3、Java8 Stream 分頁

/**@Description: Java8 Stream 分頁
 * <br> 1. 起始位置邊界值處理: 同 subList 方法
 * <br> 2. 終止位置:無需處理,會自動處理邊界問題
 *  @param pageSize 每頁顯示的數量
 *  @param pageNum  當前頁碼
 */
private List<?> subListJava8(ArrayList<?> list, int pageSize, int pageNum) {
    int count = list.size(); // 總記錄數
    // 計算總頁數
    int pages = count % pageSize == 0 ? count / pageSize : count / pageSize + 1;
    // 起始位置
    int start = pageNum <= 0 ? 0 : (pageNum > pages ? (pages - 1) * pageSize : (pageNum - 1) * pageSize);
    // 終止位置
    int end = pageSize ;
    return list.stream().skip(start).limit(pageSize).collect(Collectors.toList());
}

4、使用 Lists 工具類的 partition 分頁

/**@Description: 使用 Lists 工具類的 partition 分頁
 * <br> 1. 頁碼邊界值處理:小于等于0,情況處理; 頁碼大于 (總頁數-1) 情況處理
 * <br> 2. 總頁數-1 ,原因是:list集合索引是從0開始的。
 *  @param pageSize 每頁顯示的數量
 *  @param pageNum  當前頁碼
 * @see com.google.common.collect.Lists#partition(java.util.List, int)
 */
private List<?> partition(ArrayList<?> list, int pageSize, int pageNum) {
    // 將 List 按照 PageSzie 拆分成多個List
    List<? extends List<?>> partition = Lists.partition(list, pageSize);
    // 總頁數
    int pages = partition.size();
    pageNum = pageNum <= 0 ? 0 : (pageNum <= (pages - 1) ? pageNum : (pages - 1));
    return partition.get(pageNum);
}

三、總結

以上不管哪種方式實現分頁,對性能都會有一定的影響,尤其是數據量越大,性能越差,因為其原理是全表掃描,將所有數據查詢出來后,再在內存中進行分頁返回,在可能的情況下,盡量想想如何在sql查詢時實現分頁返回才好。

到此這篇關于Java 集合實現分頁-業(yè)務代碼實現分頁的文章就介紹到這了,更多相關Java 集合實現分頁內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:

相關文章

  • spring cloud內容匯總(各個功能模塊、啟動、部署)的詳細過程

    spring cloud內容匯總(各個功能模塊、啟動、部署)的詳細過程

    Spring Cloud 是一套基于 Spring Boot 的框架集合,用于構建分布式微服務架構,文章介紹了Spring Cloud框架及其相關工具的使用,還詳細介紹了如何配置和使用這些功能,包括配置文件、依賴管理以及實際應用示例,感興趣的朋友一起看看吧
    2024-11-11
  • SpringBoot隱式參數注入的碼優(yōu)雅升級指南

    SpringBoot隱式參數注入的碼優(yōu)雅升級指南

    這篇文章主要為大家詳細介紹了SpringBoot中隱式參數注入的相關方法,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學習一下
    2026-03-03
  • SpringMVC中redirect重定向(帶參數)的3種方式

    SpringMVC中redirect重定向(帶參數)的3種方式

    Spring MVC中做form表單功能提交時,防止用戶客戶端后退或者刷新時重復提交問題,需要在服務端進行重定向跳轉,本文主要介紹了SpringMVC中redirect重定向(帶參數)的3種方式,感興趣的可以了解一下
    2024-07-07
  • 關于MyBatis通用Mapper@Table注解使用的注意點

    關于MyBatis通用Mapper@Table注解使用的注意點

    這篇文章主要介紹了關于MyBatis通用Mapper@Table注解使用的注意點,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • JDK26中LazyConstant的具體使用

    JDK26中LazyConstant的具體使用

    LazyConstant是JDK26之后引入的新屬性,是一個延遲常量,之前的JDK25中的StableValue已經移除了,改成這個了,它本質是一個持有不可變數據的容器,能夠實現對象的按需初始化,下面就來詳細的介紹一下
    2026-05-05
  • Java 抽象類詳解

    Java 抽象類詳解

    抽象類是用abstract關鍵字修飾的類,其核心作用是作為父類提供通用模板,同時強制子類實現特定方法,本文介紹Java 抽象類的相關知識,感興趣的朋友跟隨小編一起看看吧
    2026-03-03
  • Java版仿QQ驗證碼風格圖片驗證碼

    Java版仿QQ驗證碼風格圖片驗證碼

    這篇文章主要為大家分享了java圖片驗證碼實例代碼,感興趣的小伙伴們可以參考一下
    2016-04-04
  • 詳解Java中clone的寫法

    詳解Java中clone的寫法

    這篇文章主要介紹了Java中clone的寫法,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下
    2018-07-07
  • Java實現按行分割大文件

    Java實現按行分割大文件

    這篇文章主要為大家詳細介紹了Java實現按行分割大文件,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-05-05
  • 在SpringBoot項目中優(yōu)雅的連接多臺Redis的操作方法

    在SpringBoot項目中優(yōu)雅的連接多臺Redis的操作方法

    本文將基于一個實際案例,詳細介紹如何在Spring Boot中優(yōu)雅地配置和使用多個Redis實例,解決常見的注入歧義問題,并提供一個通用的Redis工具類來簡化操作,本文給大家介紹的非常詳細,感興趣的朋友一起看看吧
    2025-09-09

最新評論

海丰县| 甘德县| 五莲县| 青川县| 抚远县| 广水市| 乳源| 沐川县| 台南市| 青河县| 阜宁县| 普兰县| 措勤县| 固原市| 木里| 平阴县| 青河县| 阿城市| 乐东| 和政县| 荆州市| 镶黄旗| 吉木萨尔县| 樟树市| 洛浦县| 黄大仙区| 常德市| 嫩江县| 吉木乃县| 林芝县| 龙胜| 公安县| 额敏县| 绥化市| 德令哈市| 新泰市| 宁安市| 云浮市| 体育| 衡阳县| 麟游县|