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

Java 集合實(shí)現(xiàn)分頁的方法(業(yè)務(wù)代碼實(shí)現(xiàn)分頁)

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

一、前言

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

二、代碼實(shí)現(xiàn)

1、假設(shè)有一個(gè) list集合,元素如下:

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

2、使用 subList 實(shí)現(xiàn)分頁:

/**
 *@Description: subList 分頁
 * <br> 1. 起始位置邊界值處理: 當(dāng)前頁碼 <= 0 情況處理; 當(dāng)前頁碼 > 最大頁碼 情況處理
 * <br> 2. 終止位置邊界值處理: 當(dāng)前頁碼 <= 0 情況處理; 終止位置 <= 總記錄數(shù)  情況處理
 * @param pageSize 每頁顯示的數(shù)量
 * @param pageNum  當(dāng)前頁碼
 */
private List<?> subList(ArrayList<?> list, int pageSize, int pageNum) {
    int count = list.size(); // 總記錄數(shù)
    // 計(jì)算總頁數(shù)
    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 每頁顯示的數(shù)量
 *  @param pageNum  當(dāng)前頁碼
 */
private List<?> subListJava8(ArrayList<?> list, int pageSize, int pageNum) {
    int count = list.size(); // 總記錄數(shù)
    // 計(jì)算總頁數(shù)
    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,情況處理; 頁碼大于 (總頁數(shù)-1) 情況處理
 * <br> 2. 總頁數(shù)-1 ,原因是:list集合索引是從0開始的。
 *  @param pageSize 每頁顯示的數(shù)量
 *  @param pageNum  當(dāng)前頁碼
 * @see com.google.common.collect.Lists#partition(java.util.List, int)
 */
private List<?> partition(ArrayList<?> list, int pageSize, int pageNum) {
    // 將 List 按照 PageSzie 拆分成多個(gè)List
    List<? extends List<?>> partition = Lists.partition(list, pageSize);
    // 總頁數(shù)
    int pages = partition.size();
    pageNum = pageNum <= 0 ? 0 : (pageNum <= (pages - 1) ? pageNum : (pages - 1));
    return partition.get(pageNum);
}

三、總結(jié)

以上不管哪種方式實(shí)現(xiàn)分頁,對性能都會有一定的影響,尤其是數(shù)據(jù)量越大,性能越差,因?yàn)槠湓硎侨頀呙瑁瑢⑺袛?shù)據(jù)查詢出來后,再在內(nèi)存中進(jìn)行分頁返回,在可能的情況下,盡量想想如何在sql查詢時(shí)實(shí)現(xiàn)分頁返回才好。

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

相關(guān)文章

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

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

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

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

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

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

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

    關(guān)于MyBatis通用Mapper@Table注解使用的注意點(diǎn)

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

    JDK26中LazyConstant的具體使用

    LazyConstant是JDK26之后引入的新屬性,是一個(gè)延遲常量,之前的JDK25中的StableValue已經(jīng)移除了,改成這個(gè)了,它本質(zhì)是一個(gè)持有不可變數(shù)據(jù)的容器,能夠?qū)崿F(xiàn)對象的按需初始化,下面就來詳細(xì)的介紹一下
    2026-05-05
  • Java 抽象類詳解

    Java 抽象類詳解

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

    Java版仿QQ驗(yàn)證碼風(fēng)格圖片驗(yàn)證碼

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

    詳解Java中clone的寫法

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

    Java實(shí)現(xiàn)按行分割大文件

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

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

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

最新評論

新乡县| 遂宁市| 崇礼县| 平凉市| SHOW| 丹东市| 齐齐哈尔市| 密云县| 扎兰屯市| 郎溪县| 察隅县| 定边县| 奎屯市| 杂多县| 西吉县| 永善县| 金华市| 桦南县| 平潭县| 五家渠市| 绵阳市| 深泽县| 彝良县| 秦皇岛市| 北票市| 苍梧县| 浦东新区| 榕江县| 青浦区| 沙河市| 钟祥市| 哈尔滨市| 高要市| 天祝| 永州市| 车险| 玛沁县| 望都县| 景德镇市| 万盛区| 东阿县|