java代码 数据较大的list 进行分页的一个方法
时间: 2024-03-17 14:45:14 浏览: 62
可以使用 Java 的 `List` 的 `subList` 方法进行分页。具体实现方法如下:
```java
public static <T> List<T> getPage(List<T> list, int pageNum, int pageSize) {
int fromIndex = (pageNum - 1) * pageSize;
if (fromIndex >= list.size()) {
return Collections.emptyList();
}
int toIndex = Math.min(fromIndex + pageSize, list.size());
return list.subList(fromIndex, toIndex);
}
```
其中,`list` 是需要进行分页的数据列表,`pageNum` 是需要获取的页码,`pageSize` 是每页的数据数量。函数返回的是获取到的分页数据。
例如,如果有一个包含 100 个元素的 `List` 对象 `data`,要获取第 3 页,每页 10 条数据,可以这样调用上述方法:
```java
List<Object> pageData = getPage(data, 3, 10);
```
这样就可以获取到第 3 页的数据了。
相关问题
java代码 数据较大的list 进行分页的一个方法,并且调用测试
以下是Java代码实现数据较大的List分页的方法:
```java
import java.util.List;
public class ListPager<T> {
private List<T> data;
private int pageSize;
public ListPager(List<T> data, int pageSize) {
this.data = data;
this.pageSize = pageSize;
}
public List<T> getPage(int pageNumber) {
int fromIndex = (pageNumber - 1) * pageSize;
if (fromIndex >= data.size()) {
return null;
}
int toIndex = Math.min(fromIndex + pageSize, data.size());
return data.subList(fromIndex, toIndex);
}
}
```
使用示例:
```java
import java.util.ArrayList;
import java.util.List;
public class Main {
public static void main(String[] args) {
// Mock data
List<String> data = new ArrayList<>();
for (int i = 1; i <= 100; i++) {
data.add("Item " + i);
}
// Create pager
ListPager<String> pager = new ListPager<>(data, 10);
// Get page 1
List<String> page1 = pager.getPage(1);
System.out.println("Page 1: " + page1);
// Get page 2
List<String> page2 = pager.getPage(2);
System.out.println("Page 2: " + page2);
// Get page 3
List<String> page3 = pager.getPage(3);
System.out.println("Page 3: " + page3);
}
}
```
输出结果:
```
Page 1: [Item 1, Item 2, Item 3, Item 4, Item 5, Item 6, Item 7, Item 8, Item 9, Item 10]
Page 2: [Item 11, Item 12, Item 13, Item 14, Item 15, Item 16, Item 17, Item 18, Item 19, Item 20]
Page 3: [Item 21, Item 22, Item 23, Item 24, Item 25, Item 26, Item 27, Item 28, Item 29, Item 30]
```
java代码 数据较大的list 进行分页
对于数据较大的 `List` 进行分页时,为了避免加载过多的数据导致内存溢出,我们可以采用分段查询的方式,每次只查询当前页需要的记录。这可以通过数据库的分页查询语句来实现,但如果没有使用数据库,我们可以通过 `List` 的 `subList` 方法来实现分页。
以下是一个基于 `subList` 的 Java 分页实现示例:
```java
public class Pagination {
private int pageSize; // 每页显示的记录数
private int currentPage; // 当前页码
private int totalCount; // 记录总数
private List<Object> items; // 记录列表
public Pagination(int pageSize, int currentPage, int totalCount, List<Object> items) {
this.pageSize = pageSize;
this.currentPage = currentPage;
this.totalCount = totalCount;
this.items = items;
}
// 获取总页数
public int getTotalPage() {
return (int) Math.ceil((double) totalCount / pageSize);
}
// 获取当前页的起始位置
public int getStartIndex() {
return (currentPage - 1) * pageSize;
}
// 获取当前页的记录列表
public List<Object> getCurrentPageItems() {
int fromIndex = getStartIndex();
int toIndex = Math.min(fromIndex + pageSize, totalCount);
return items.subList(fromIndex, toIndex);
}
// 判断是否有上一页
public boolean hasPreviousPage() {
return currentPage > 1;
}
// 判断是否有下一页
public boolean hasNextPage() {
return currentPage < getTotalPage();
}
// 获取上一页的页码
public int getPreviousPage() {
return hasPreviousPage() ? currentPage - 1 : 1;
}
// 获取下一页的页码
public int getNextPage() {
return hasNextPage() ? currentPage + 1 : getTotalPage();
}
}
```
使用时,我们可以先从数据源中查询出所有的记录,然后再将其传入 `Pagination` 对象。在获取当前页的记录列表时,我们只需要根据当前页码和每页显示的记录数计算出需要查询的记录的起始和结束位置,然后调用 `subList` 方法来获取指定范围内的记录列表。
需要注意的是,由于 `subList` 方法返回的是原有列表的一个视图,因此在分页时要避免对其进行修改。如果需要对分页后的数据进行修改,可以将其复制到一个新的列表中。
阅读全文