欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

一、前言

在Java開(kāi)發(fā)中,有些場(chǎng)景比較復(fù)雜,受限制,不好在sql查詢層面實(shí)現(xiàn)分頁(yè),需要在查詢的list結(jié)果后,將list分頁(yè)返回,如何實(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)分頁(yè):

/**
 *@Description: subList 分頁(yè)
 * <br> 1. 起始位置邊界值處理: 當(dāng)前頁(yè)碼 <= 0 情況處理; 當(dāng)前頁(yè)碼 > 最大頁(yè)碼 情況處理
 * <br> 2. 終止位置邊界值處理: 當(dāng)前頁(yè)碼 <= 0 情況處理; 終止位置 <= 總記錄數(shù)  情況處理
 * @param pageSize 每頁(yè)顯示的數(shù)量
 * @param pageNum  當(dāng)前頁(yè)碼
 */
private List<?> subList(ArrayList<?> list, int pageSize, int pageNum) {
    int count = list.size(); // 總記錄數(shù)
    // 計(jì)算總頁(yè)數(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 分頁(yè)

/**@Description: Java8 Stream 分頁(yè)
 * <br> 1. 起始位置邊界值處理: 同 subList 方法
 * <br> 2. 終止位置:無(wú)需處理,會(huì)自動(dòng)處理邊界問(wèn)題
 *  @param pageSize 每頁(yè)顯示的數(shù)量
 *  @param pageNum  當(dāng)前頁(yè)碼
 */
private List<?> subListJava8(ArrayList<?> list, int pageSize, int pageNum) {
    int count = list.size(); // 總記錄數(shù)
    // 計(jì)算總頁(yè)數(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 分頁(yè)

/**@Description: 使用 Lists 工具類的 partition 分頁(yè)
 * <br> 1. 頁(yè)碼邊界值處理:小于等于0,情況處理; 頁(yè)碼大于 (總頁(yè)數(shù)-1) 情況處理
 * <br> 2. 總頁(yè)數(shù)-1 ,原因是:list集合索引是從0開(kāi)始的。
 *  @param pageSize 每頁(yè)顯示的數(shù)量
 *  @param pageNum  當(dāng)前頁(yè)碼
 * @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);
    // 總頁(yè)數(shù)
    int pages = partition.size();
    pageNum = pageNum <= 0 ? 0 : (pageNum <= (pages - 1) ? pageNum : (pages - 1));
    return partition.get(pageNum);
}

三、總結(jié)

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

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

相關(guān)文章

  • Java超詳細(xì)透徹講解static

    Java超詳細(xì)透徹講解static

    static關(guān)鍵字基本概念我們可以一句話來(lái)概括:方便在沒(méi)有創(chuàng)建對(duì)象的情況下來(lái)進(jìn)行調(diào)用。也就是說(shuō):被static關(guān)鍵字修飾的不需要?jiǎng)?chuàng)建對(duì)象去調(diào)用,直接根據(jù)類名就可以去訪問(wèn),讓我們來(lái)了解一下你可能還不知道情況
    2022-05-05
  • intellij idea使用git stash暫存一次提交的操作

    intellij idea使用git stash暫存一次提交的操作

    這篇文章主要介紹了intellij idea使用git stash暫存一次提交的操作,具有很好的參考價(jià)值希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-02-02
  • Java利用poi讀取Excel詳解實(shí)現(xiàn)

    Java利用poi讀取Excel詳解實(shí)現(xiàn)

    Apache POI 是用Java編寫(xiě)的免費(fèi)開(kāi)源的跨平臺(tái)的 Java API,Apache POI提供API給Java對(duì)Microsoft Office格式檔案讀和寫(xiě)的功能。POI為“Poor Obfuscation Implementation”的首字母縮寫(xiě),意為簡(jiǎn)潔版的模糊實(shí)現(xiàn)
    2022-07-07
  • springboot配置多個(gè)數(shù)據(jù)源兩種方式實(shí)現(xiàn)

    springboot配置多個(gè)數(shù)據(jù)源兩種方式實(shí)現(xiàn)

    在我們的實(shí)際業(yè)務(wù)中可能會(huì)遇到;在一個(gè)項(xiàng)目里面讀取多個(gè)數(shù)據(jù)庫(kù)的數(shù)據(jù)來(lái)進(jìn)行展示,spring對(duì)同時(shí)配置多個(gè)數(shù)據(jù)源是支持的,本文主要介紹了springboot配置多個(gè)數(shù)據(jù)源兩種方式實(shí)現(xiàn),感興趣的可以了解一下
    2022-03-03
  • Spring中的AOP操作你了解嗎

    Spring中的AOP操作你了解嗎

    這篇文章主要為大家詳細(xì)介紹了Spring中的AOP操作,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助
    2022-02-02
  • Java泛型機(jī)制與反射原理相關(guān)知識(shí)總結(jié)

    Java泛型機(jī)制與反射原理相關(guān)知識(shí)總結(jié)

    今天帶大家學(xué)習(xí)的是關(guān)于Java進(jìn)階的相關(guān)知識(shí),文章圍繞著Java泛型機(jī)制與反射原理展開(kāi),文中有非常詳細(xì)的介紹及代碼示例,需要的朋友可以參考下
    2021-06-06
  • 在Java中實(shí)現(xiàn)可見(jiàn)性(visibility)的主要方法詳解

    在Java中實(shí)現(xiàn)可見(jiàn)性(visibility)的主要方法詳解

    這篇文章主要介紹了在Java中實(shí)現(xiàn)可見(jiàn)性(visibility)的主要方法詳解,在Java中,使用關(guān)鍵字volatile和使用鎖(如synchronized關(guān)鍵字或 java.util.concurrent包中的鎖)來(lái)確保對(duì)共享變量的修改在多線程環(huán)境中能夠正確地被其他線程所觀察到,需要的朋友可以參考下
    2023-08-08
  • java中獲取類資源的方法總結(jié)

    java中獲取類資源的方法總結(jié)

    在本篇文章里小編給大家整理的是關(guān)于java中獲取類資源的方法總結(jié),需要的朋友們可以學(xué)習(xí)參考下。
    2020-02-02
  • Mybatis mapper接口動(dòng)態(tài)代理開(kāi)發(fā)步驟解析

    Mybatis mapper接口動(dòng)態(tài)代理開(kāi)發(fā)步驟解析

    這篇文章主要介紹了Mybatis mapper接口動(dòng)態(tài)代理開(kāi)發(fā)步驟解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-07-07
  • Kotlin內(nèi)存陷阱inline使用技巧示例詳解

    Kotlin內(nèi)存陷阱inline使用技巧示例詳解

    這篇文章主要為大家介紹了Kotlin內(nèi)存陷阱inline使用技巧示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-10-10

最新評(píng)論