当前位置: 首页 > news >正文

java分页遍历

  1. 数据查询模拟,最多返回三页数据

    1. 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;}List<String> ans = new ArrayList<>(size);for(int i=0;i<size;i++){ans.add((start + i) + "_" + UUID.randomUUID().toString());}return ans;
      }
      
  2. 实现方式

    1. while循环

      1. private static void scanByNormal(){int start =0;int size =5;while(true){List<Stirng> list = randStr(start,size);for(String str : list){System.out.println(str);}if(list.size() < size){break;}start += list.size();}
        }
        
    2. 迭代器实现

      1. //自定义实现一个通用的分页迭代器
        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(){}@Overridepublic 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;}@Overridepublic T next(){return list.get(currentIndex++);}public abstract List<T> load(int start,int size);
        }
        
      2. //实现
        private static void scanByIterator(){MyIterator<String> iterator = new MyIterator<String>(){@Overridepublic List<String> load(int start,int size){return randStr(start,size);}};while(iterator.hasNext()){String str=iterator.next();System.out.println(str);}
        }
        
      3. //在JDK1.8中
        public class IteratorTestForJdk18{@FunctionalInterfacepublic 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;}@Overridepublic 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;}@Overridepublic T next(){return list.get(currentIndex++);}}
        }
        
      4. //在jdk1.8之后,
        private static void scanByIteratorInJdk8(){new MyIterator<>(IteratorTestForJdk18::randStr).forEachRemaining(System.out::println);
        }
        

http://www.mrgr.cn/news/54815.html

相关文章:

  • MyBatis入门程序之客户添加、更新与删除
  • 如何使用Git推送本地搭建的仓库以及远程克隆的仓库
  • Synopsys工具中命令中filter选项
  • 针对考研的C语言学习(2014二叉树大题代码实战)
  • python绝对值怎么表示
  • 如何做软件系统的成本估算?
  • C# 条形码、二维码标签打印程序
  • git分支操作简记
  • 设计模式总结
  • vscode默认添加python项目的源目录路径到执行环境(解决ModuleNotFoundError: No module named问题)
  • debug:vscode使用ssh连接
  • pycharm调试带参数命令行的程序
  • Linux批量创建多个文件
  • 淘系商品详情数据接口系列的详细介绍
  • 推荐一款非常好用的3d设计软件:LuBan 3D
  • 基于opencv的人脸闭眼识别疲劳监测
  • Eclipse——Java开发详解
  • java基本数据类型
  • 自动对焦爬山算法原理
  • MySQL数据库备份和恢复:全面指南与实战代码
  • 【算法】KMP字符串匹配算法
  • MySQL-28.事务-介绍与操作
  • ElasticSearch-7.17.24设置密码及CA证书
  • aaaaaaaaaa
  • scrapy案例——豆瓣电影Top250的爬取
  • python中堆的用法