Java内存分页工具

代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
import org.springframework.data.domain.Pageable;

import java.util.ArrayList;
import java.util.List;

/**
* 内存分页工具
* @author chenb
*/
public class RamPager<T> {
private static final int DEFAULT_PAGE_SIZE = 20;

private List<T> data;
private Pageable pageable;

public RamPager(List<T> data, Pageable pageable) {
this.data = data;
this.pageable = pageable;
}

public List<T> page() {
if (data == null || data.isEmpty()) {
return new ArrayList<>();
}
int pageNum = pageable == null ? 1 : pageable.getPageNumber() + 1;
int pageSize = pageable == null ? DEFAULT_PAGE_SIZE : pageable.getPageSize();
if (pageNum < 0) {
pageNum = 1;
}
int from = (pageNum - 1) * pageSize;
int to = pageNum * pageSize;
if (to > data.size()) {
to = data.size();
}
if (from >= data.size() || to <= from) {
return new ArrayList<>();
}
return data.subList(from, to);
}
}

  • 各类特殊情况都返回空的List
  • pageable接口页码从0开始(与Spring Data JPA相匹配)
  • 默认pageSize为20
文章目录