一个简单的遍历需求
今天开发一个前端遍历展示的接口,被前端怼了
看图需求很简单
- 多行展示
- 每行多个,可显示更多,每行可左右滑动
为了图省事简单组装一下直接返回回去了,方便是真的方便,前端生气也是真的生气,可以简单对这个横向、纵向接口压缩一下
- 横向空间上,可以取分页,前端自己传,无论是懒加载还是更多,根据pageSize、返回的数据量决定,可以提供给前端自定义的空间
- 纵向空间上,入参加入 type,前端自己写死对应枚举
这样无论扩展还是数据冗余都有比较大的改善
/**
* 兑换页信息
*/
@RequestMapping("tab")
public ResultVO<ShopTapBrieVo> tab(@RequestHeader(HttpHeadConstant.lgType) int lgType,
@RequestParam int tabType,
@RequestParam int pageIndex,
@RequestParam int pageSize) {
return ResultVO.success(shopService.tab(tabType, pageIndex, pageSize, lgType));
}
// service
public ShopTapBrieVo tab(int pageIndex, int pageSize, int type, int lgType) {
for (ShopTab shopTab : ItemManager.getShopTabs()) {
if (shopTab.getId() != type) {
continue;
}
ShopTapBrieVo vo = new ShopTapBrieVo();
LanguageInfo language = LanguageManger.getLanguage(Module.SHOP, ItemManager.TYPE2_SHOP_TAP_NAME, 0, shopTab.getId(), lgType);
if (language != null) {
vo.setTapTitle(language.getContext1());
} else {
vo.setTapTitle(shopTab.getName());
}
List<ShopDefineBrieVo> collect = ItemManager.getShopTabDefines(shopTab.getId())
.stream()
.map(e -> new ShopDefineBrieVo(e, lgType))
.collect(Collectors.toList());
// 内存分页
int total = collect.size();
int fromIndex = Math.min(pageIndex * pageSize, total);
int toIndex = Math.min((pageIndex + 1) * pageSize, total);
vo.setVos(collect.subList(fromIndex, toIndex));
return vo;
}
return null;
}
由于规则数据是预加载到内存中,所以直接使用内存分页,由于 subList 采用的是视图,并不会创建多余的对象,这里顺便回顾一下其他知识 java集合中sublist()的坑
这是一段防爬代码块,我不介意文章被爬取,但请注明出处
console.log("作者主页:https://www.cnblogs.com/Go-Solo");
console.log("原文地址:https://www.cnblogs.com/Go-Solo/p/18332136");