list.sublist 分页
时间: 2023-06-05 22:47:38 浏览: 212
list.sublist 可以在 Java 中用于分页。它是一个 List 接口的方法,可以返回一个子列表,该子列表是原始列表的一部分。使用这种方法可以在处理大量数据时,将数据分成几个部分进行逐步处理,从而避免一次性加载整个数据而造成系统负担过重。
假设有一个包含了 1000 个元素的列表,我们想将其分为每页 50 条数据的多个列表。我们可以通过循环来遍历所有的页面:
1. 定义每页显示的元素数为 n=50;
2. 计算总页数为 totalPage=1000/50=20;
3. 循环 20 次,每次从初始索引值为 i=0,结束索引值为 j=i+n-1 开始,使用 list.sublist(i, j) 方法来获取子列表;
4. 在子列表中遍历获取到每个元素的数据,进行处理。
这种方式可以有效地减轻系统的负担,提高处理数据的速度和效率。当然,在使用 sublist 方法时需要特别注意索引的范围,避免出现索引越界的情况。同时,由于 sublist 返回的是原始列表的一个子列表,因此对其进行修改可能会影响到原始列表。
相关问题
代码优化 List<DeviceDataShow> list = equDeviceService.deviceAllData(deviceDataSearch); TableDataInfo rspData = new TableDataInfo(); rspData.setCode(200); if (CollectionUtils.isEmpty(list)) { rspData.setRows(new ArrayList<>()); }else{ int start = (deviceDataSearch.getPageNum() - 1) * deviceDataSearch.getPageSize(); if (list.size() >= (deviceDataSearch.getPageNum() * deviceDataSearch.getPageSize())) { rspData.setRows(list.subList(start, deviceDataSearch.getPageSize())); } else { rspData.setRows(list.subList(start,list.size())); } } rspData.setMsg("查询成功"); rspData.setTotal(list.size());
首先需要注意的是,该代码使用了分页查询功能,可以有效地减少数据传输的量,提高系统性能。但是,还可以进一步优化该代码:
1. 避免在代码中直接使用魔法数字,如200、1、0等,应该将这些数字定义为常量,提高代码的可读性和可维护性。
2. 在判断List是否为空时,可以使用更加简洁的方式,如`if(list == null || list.isEmpty())`。
3. 在设置返回的列表数据时,可以使用Java 8的Stream API来实现,如:
```java
rspData.setRows(list.stream()
.skip(start)
.limit(deviceDataSearch.getPageSize())
.collect(Collectors.toList()));
```
4. 在获取总记录数时,可以使用list.size()来获取,但是如果数据量非常大时,可能会影响系统性能。因此,可以在查询时,同时返回总记录数,避免再次查询数据库,提高系统性能。
综上所述,优化后的代码如下所示:
```java
List<DeviceDataShow> list = equDeviceService.deviceAllData(deviceDataSearch);
TableDataInfo rspData = new TableDataInfo();
rspData.setCode(HttpServletResponse.SC_OK);
if (list == null || list.isEmpty()) {
rspData.setRows(Collections.emptyList());
} else {
int start = (deviceDataSearch.getPageNum() - 1) * deviceDataSearch.getPageSize();
rspData.setRows(list.stream()
.skip(start)
.limit(deviceDataSearch.getPageSize())
.collect(Collectors.toList()));
}
rspData.setMsg("查询成功");
rspData.setTotal(list.size());
```
请描述这段代码:PageDomain pageDomain = TableSupport.buildPageRequest(); if (null == pageDomain.getPageNum() || null == pageDomain.getPageSize()) { rspData.setRows(userList); rspData.setTotal(userList.size()); return rspData; } Integer pageNum = (pageDomain.getPageNum() - 1) * 10; Integer pageSize = pageDomain.getPageNum() * 10; if (pageSize > userList.size()) { pageSize = userList.size(); } rspData.setRows(userList.subList(pageNum, pageSize)); rspData.setTotal(userList.size()); return rspData;
这段代码是对查询到的结果进行分页处理。首先通过TableSupport.buildPageRequest()方法构建了一个分页请求对象PageDomain,然后判断PageDomain对象中的pageNum和pageSize属性是否为空,如果有一个为空,则表示不需要进行分页处理,直接将查询到的所有结果封装到返回结果rspData对象中,然后返回rspData。如果pageNum和pageSize都不为空,则进行分页处理,计算出查询结果中需要返回的数据的起始下标pageNum和结束下标pageSize,如果pageSize大于查询结果的总数,则将pageSize设置为查询结果的总数。最后,通过List的subList()方法截取查询结果中需要返回的数据,并将其封装到返回结果rspData对象中,同时将查询结果的总数设置到rspData对象的total属性中,然后返回rspData。
阅读全文