怎么在java中实现一个分页遍历功能-亚博电竞手机版
行业资讯
2021年03月02日 23:49
0
怎么在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===================="); list ans=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; privatelist list; 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 publiclist load(intstart,intsize){ returnrandstr(start,size); } }; while(iterator.hasnext()){ stringstr=iterator.next(); system.out.println(str); } } 那么问题来了,上面这种使用方式比前面的优势体现再哪儿呢?
双层循环改为单层循环
接下来接入重点了,在jdk1.8引入了函数方法 lambda之后,又提供了一个更简洁的使用姿势
publicclassiteratortestforjdk18{ @functionalinterface publicinterfaceloadfunc{ list load(intstart,intsize); } publicstaticclassmyiterator implementsiterator { privateintstart=0; privateintsize=5; privateintcurrentindex; privatebooleanhasmore=true; privatelist list; privateloadfunc loadfunc; publicmyiterator(loadfunc loadfunc){ 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中实现一个分页遍历功能的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注恰卡编程网行业资讯频道,感谢各位的阅读!
展开全文