日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

詳解Java中兩種分頁遍歷的使用姿勢

瀏覽:21日期:2022-08-15 18:26:32

在日常開發中,分頁遍歷迭代的場景可以說非常普遍了,比如掃表,每次撈100條數據,然后遍歷這100條數據,依次執行某個業務邏輯;這100條執行完畢之后,再加載下一百條數據,直到掃描完畢

那么要實現上面這種分頁迭代遍歷的場景,我們可以怎么做呢

本文將介紹兩種使用姿勢

常規的使用方法 借助Iterator的使用姿勢1. 數據查詢模擬

首先mock一個分頁獲取數據的邏輯,直接隨機生成數據,并且控制最多返回三頁

public static int cnt = 0;private static List<String> randStr(int start, int size) { ++cnt; if (cnt > 3) { return Collections.emptyList(); } else if (cnt == 3) { cnt = 0; size -= 2; } System.out.println('======================= start to gen randList ===================='); List<String> ans = new ArrayList<>(size); for (int i = 0; i < size; i++) { ans.add((start + i) + '_' + UUID.randomUUID().toString()); } return ans;}2. 基本實現方式

針對這種場景,最常見也是最簡單直觀的實現方式

while死循環 內部遍歷

private static void scanByNormal() { int start = 0; int size = 5; while (true) { List<String> list = randStr(start, size); for (String str : list) { System.out.println(str); } if (list.size() < size) { break; } start += list.size(); }}3. 迭代器實現方式

接下來介紹一種更有意思的方式,借助迭代器的遍歷特性來實現,首先自定義一個通用分頁迭代器

public static abstract class MyIterator<T> implements Iterator<T> { private int start = 0; private int size = 5; private int currentIndex; private boolean hasMore = true; private List<T> list; public MyIterator() { } @Override public boolean hasNext() { if (list != null && list.size() > currentIndex) { return true; } // 當前的數據已經加載完畢,嘗試加載下一批 if (!hasMore) { return false; } list = load(start, size); if (list == null || list.isEmpty()) { // 沒有加載到數據,結束 return false; } if (list.size() < size) { // 返回條數小于限制條數,表示還有更多的數據可以加載 hasMore = false; } currentIndex = 0; start += list.size(); return true; } @Override public T next() { return list.get(currentIndex++); } public abstract List<T> load(int start, int size);}

接下來借助上面的迭代器可以比較簡單的實現我們的需求了

private static void scanByIterator() { MyIterator<String> iterator = new MyIterator<String>() { @Override public List<String> load(int start, int size) { return randStr(start, size); } }; while (iterator.hasNext()) { String str = iterator.next(); System.out.println(str); }}

那么問題來了,上面這種使用方式比前面的優勢體現再哪兒呢?

雙層循環改為單層循環

接下來接入重點了,在jdk1.8引入了函數方法 + lambda之后,又提供了一個更簡潔的使用姿勢

public class IteratorTestForJdk18 { @FunctionalInterface public interface LoadFunc<T> { List<T> load(int start, int size); } public static class MyIterator<T> implements Iterator<T> { private int start = 0; private int size = 5; private int currentIndex; private boolean hasMore = true; private List<T> list; private LoadFunc<T> loadFunc; public MyIterator(LoadFunc<T> loadFunc) { this.loadFunc = loadFunc; } @Override public boolean hasNext() { if (list != null && list.size() > currentIndex) {return true; } // 當前的數據已經加載完畢,嘗試加載下一批 if (!hasMore) {return false; } list = loadFunc.load(start, size); if (list == null || list.isEmpty()) {// 沒有加載到數據,結束return false; } if (list.size() < size) {// 返回條數小于限制條數,表示還有更多的數據可以加載hasMore = false; } currentIndex = 0; start += list.size(); return true; } @Override public T next() { return list.get(currentIndex++); } }}

在jdk1.8及之后的使用姿勢,一行代碼即可

private static void scanByIteratorInJdk8() { new MyIterator<>(IteratorTestForJdk18::randStr) .forEachRemaining(System.out::println);}

這次對比效果是不是非常顯眼了,從此以后分頁迭代遍歷再也不用冗長的雙重迭代了

到此這篇關于詳解Java中兩種分頁遍歷的使用姿勢的文章就介紹到這了,更多相關Java 分頁遍歷內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: Java
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
国产精品乱战久久久| 亚洲精品网址| 日韩精彩视频在线观看| 日韩有吗在线观看| 亚洲欧洲美洲国产香蕉| 亚洲一区二区免费看| 久久aⅴ国产紧身牛仔裤| 婷婷亚洲五月| 狠狠操综合网| 国产毛片一区| 喷白浆一区二区| 亚洲精品国产精品粉嫩| 日本精品另类| 精品色999| 久久亚洲资源中文字| 国产一区二区三区亚洲综合| 国产精品13p| 91精品国产福利在线观看麻豆| 成人羞羞在线观看网站| 国产超碰精品| 影音先锋国产精品| 亚洲精品字幕| 国产精品99久久免费| 高清日韩中文字幕| 亚洲国产专区| 男人操女人的视频在线观看欧美| 中文字幕日韩亚洲| 国产日韩一区| 美女av在线免费看| 国产偷自视频区视频一区二区| 欧美精品一卡| 久久国产婷婷国产香蕉| 成人污污视频| 日韩网站在线| 国产日韩在线观看视频| 日本不卡免费高清视频在线| 在线精品小视频| 日韩精品第二页| 国产一区二区久久久久| 午夜国产欧美理论在线播放 | 亚洲精品麻豆| 国产区精品区| 色婷婷精品视频| 亚洲三级在线| 国产传媒在线观看| 蜜臀av亚洲一区中文字幕| 国产福利一区二区三区在线播放| 91精品精品| 日韩精品福利一区二区三区| 黑人精品一区| 亚洲不卡视频| av综合电影网站| 午夜视频一区二区在线观看| 高清精品久久| 日韩视频一二区| 中文另类视频| 日韩精彩视频在线观看| 欧美日韩国产v| 午夜亚洲福利| 欧美亚洲国产精品久久| 国产色噜噜噜91在线精品| 激情欧美日韩一区| 国产激情综合| 男人的天堂久久精品| 日韩成人免费| 日韩激情网站| 激情欧美一区| 美女视频黄久久| 免费日本视频一区| 免费污视频在线一区| 青草国产精品| 亚洲手机在线| 久久男人av| 亚洲男人在线| 国产伊人精品| 精品国产亚洲一区二区三区大结局| 亚洲欧美不卡| 亚洲www免费| 国产精品xxx| 午夜视频一区二区在线观看| 亚洲精品91| 色网在线免费观看| 国产激情精品一区二区三区| 亚洲在线久久| 亚洲黄色影院| 日韩欧美三级| 精品国产一区二区三区av片| 亚洲一区二区三区高清| 九九精品调教| 久草精品视频| 国产欧美一区二区三区精品观看| 亚洲综合三区| 久久精品成人| 久久亚洲精精品中文字幕| 日韩国产欧美三级| 中文一区一区三区免费在线观 | 日韩中文一区二区| 欧美特黄一级| 成人羞羞在线观看网站| 国产在线日韩精品| 美女久久99| 国产精品日韩精品在线播放| 免费久久99精品国产自在现线| 欧美精品高清| jizzjizz中国精品麻豆| 欧美国产亚洲精品| 久久国产婷婷国产香蕉| 亚欧成人精品| 影音先锋久久精品| 亚洲欧美日本视频在线观看| 五月精品视频| 亚洲福利免费| 激情欧美一区| 欧美一区二区三区高清视频 | 99精品国产一区二区三区| 色婷婷色综合| 精品视频一区二区三区在线观看| 国产精品蜜月aⅴ在线| 日本少妇一区二区| 97久久超碰| 国产麻豆一区| 国产精品久久久久久久久久久久久久久| 日韩avvvv在线播放| 日韩和欧美一区二区| 亚洲精品一二| 欧美日韩一视频区二区| 欧美一级一区| 欧美日韩91| 国产精选久久| 国产极品久久久久久久久波多结野| 欧美偷窥清纯综合图区| 五月亚洲婷婷 | 丁香婷婷久久| 成人欧美一区二区三区的电影| а√在线中文在线新版| 成人精品亚洲| 国产精品美女久久久浪潮软件| 亚洲男女自偷自拍| 亚州av日韩av| 欧美日韩伊人| 精品一区二区三区的国产在线观看| 老色鬼精品视频在线观看播放| 成人午夜毛片| 久久久久久久久丰满| 亚洲性视频h| 蜜臀久久99精品久久久画质超高清 | 亚洲一区二区三区四区五区午夜| 蜜桃国内精品久久久久软件9| 亚洲一级在线| 欧美视频二区| 欧美激情亚洲| 久久久久国产一区二区| 国产精品视区| 国产毛片久久久| 欧美日韩国产v| 视频在线观看91| 欧美久久亚洲| 欧美日韩尤物久久| 亚洲精品成人一区| 精品一区二区三区中文字幕在线| 亚洲人成在线网站| 丝瓜av网站精品一区二区| 亚洲精品第一| 国内精品亚洲| 一区在线免费| 国产免费av一区二区三区| 国产自产自拍视频在线观看| 国内精品99| 欧美一级网址| 天堂а√在线最新版中文在线| 亚洲一区二区成人| 欧美aa在线视频| 九九综合九九| 国产精品久久久亚洲一区| 91精品推荐| 国产亚洲精aa在线看| 久久国产日韩| 亚洲精品乱码日韩| 日韩大片在线观看| 日韩精品一区第一页| 精品少妇一区| 男女男精品视频网| 国产精品久久久久久久免费观看| 激情91久久| 久久亚洲黄色| 久色成人在线| 日韩av自拍| 亚洲精品成a人ⅴ香蕉片| 中文字幕在线高清| 91成人精品在线| 亚洲不卡av不卡一区二区| 日韩av影院| 伊人精品一区| 欧美国产极品| 丝袜美腿亚洲色图| 高清一区二区三区| 日本少妇精品亚洲第一区| japanese国产精品| 国精品产品一区| 97精品资源在线观看|