开发中遇到的问题-对数组的截取
场景
在一个接口请求中,可以传入多个参数,但是由于接口参数传参有限制,所以需要对接口参数进行分页处理,这里采取list下标索引截取的方式
实例代码
实现思路:
首先根据类列表长度计算分页,如果刚好除尽,取整数;如果有余数,则页码加1;
然后根据页码截取分段列表,判断起始索引和结束索引:
起始页以末尾为0的整数作为fromIndex,toIndex为下一页的起始页,或列表的长度(列表长度不能除尽的时候);
toIndex为下一页的起始页,或列表的长度的判断逻辑为:
当取下一页数组索引大于当前列表长度的话,说明此时已翻到最后一页,所以取列表长度即可;
否则是当下一页的索引<=当前列表长度,则toIndex取下一页起始页即可;
此处容易引起怀疑的点在于toIndex的获取,由于数组索引是从零开始,而toIndex是比当前结束索引的值大1的,toIndex-fromIndex = size是当前要截取的长度,此处要考虑清除
public class ListDemo {
public static void testPage(){
List<Integer> skuIdList = new ArrayList<>();
for(int i=0;i<32;i++){
skuIdList.add(i);
}
skuIdList.forEach(System.out::println);
System.out.println("----------------------------------");
int cycleSize = 30;
//首先根据类列表长度计算分页,如果刚好除尽,取整数;如果有余数,则页码加1
int cycle = skuIdList.size()%cycleSize==0?skuIdList.size()/cycleSize:skuIdList.size()/cycleSize+1;
//此处我们开始对列表按页码进行截取,首先起始页以末尾为0的整数作为fromIndex,toIndex为下一页的起始页,或列表的长度(列表长度不能除尽的时候)
for (int i=0;i<cycle;i++){
int fromIndex = i*cycleSize;
// 此时判断:当取下一页数组索引大于当前列表长度的话,说明此时已翻到最后一页,所以取列表长度即可;否则是当下一页的索引<=当前列表长度,则toIndex取下一页起始页即可;
int toIndex = (i+1)*cycleSize>skuIdList.size()?skuIdList.size():(i+1)*cycleSize;
System.out.println("fromIndex:"+fromIndex+"toIndex:"+toIndex);
List<Integer> subList = skuIdList.subList(fromIndex,toIndex);
System.out.println("subList size:"+subList.size());
subList.forEach(System.out::println);
}
}
分类:
工作中遇到的问题总结
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?