怎么在java中实现一个分页遍历功能-亚博电竞手机版

怎么在java中实现一个分页遍历功能?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。

1. 数据查询模拟

首先mock一个分页获取数据的逻辑,直接随机生成数据,并且控制最多返回三页

publicstaticintcnt=0;  privatestaticlistrandstr(intstart,intsize){   cnt; if(cnt>3){ returncollections.emptylist(); }elseif(cnt==3){ cnt=0; size-=2; }  system.out.println("=======================starttogenrandlist===================="); listans=newarraylist<>(size); for(inti=0;i

2. 基本实现方式

针对这种场景,最常见也是最简单直观的实现方式

  • while死循环

  • 内部遍历

privatestaticvoidscanbynormal(){ intstart=0; intsize=5; while(true){ listlist=randstr(start,size); for(stringstr:list){ system.out.println(str); }  if(list.size()

3. 迭代器实现方式

接下来介绍一种更有意思的方式,借助迭代器的遍历特性来实现,首先自定义一个通用分页迭代器

publicstaticabstractclassmyiteratorimplementsiterator{ privateintstart=0; privateintsize=5;  privateintcurrentindex; privatebooleanhasmore=true; privatelistlist;  publicmyiterator(){ }  @override publicbooleanhasnext(){ if(list!=null&&list.size()>currentindex){ returntrue; }  //当前的数据已经加载完毕,尝试加载下一批 if(!hasmore){ returnfalse; }  list=load(start,size); if(list==null||list.isempty()){ //没有加载到数据,结束 returnfalse; }  if(list.size()load(intstart,intsize); }

接下来借助上面的迭代器可以比较简单的实现我们的需求了

privatestaticvoidscanbyiterator(){ myiteratoriterator=newmyiterator(){ @override publiclistload(intstart,intsize){ returnrandstr(start,size); } };  while(iterator.hasnext()){ stringstr=iterator.next(); system.out.println(str); } }

那么问题来了,上面这种使用方式比前面的优势体现再哪儿呢?

双层循环改为单层循环

接下来接入重点了,在jdk1.8引入了函数方法 lambda之后,又提供了一个更简洁的使用姿势

publicclassiteratortestforjdk18{  @functionalinterface publicinterfaceloadfunc{ listload(intstart,intsize); }  publicstaticclassmyiteratorimplementsiterator{ privateintstart=0; privateintsize=5;  privateintcurrentindex; privatebooleanhasmore=true; privatelistlist; privateloadfuncloadfunc;  publicmyiterator(loadfuncloadfunc){ this.loadfunc=loadfunc; }  @override publicbooleanhasnext(){ if(list!=null&&list.size()>currentindex){ returntrue; }  //当前的数据已经加载完毕,尝试加载下一批 if(!hasmore){ returnfalse; }  list=loadfunc.load(start,size); if(list==null||list.isempty()){ //没有加载到数据,结束 returnfalse; }  if(list.size()

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

privatestaticvoidscanbyiteratorinjdk8(){ newmyiterator<>(iteratortestforjdk18::randstr) .foreachremaining(system.out::println); }

看完上述内容,你们掌握怎么在java中实现一个分页遍历功能的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注恰卡编程网行业资讯频道,感谢各位的阅读!

展开全文
内容来源于互联网和用户投稿,文章中一旦含有亚博电竞手机版的联系方式务必识别真假,本站仅做信息展示不承担任何相关责任,如有侵权或涉及法律问题请联系亚博电竞手机版删除

最新文章

网站地图