我有对象列表。我需要做分页 输入参数是每页和页码的最大对象数。
例如输入list = ("a", "b", "c", "d", "e", "f")
每页的最大数量为2
页码是2
结果=(“c”,“d”)
是否有任何现成的类(libs)来执行此操作?例如Apache项目等。
答案 0 :(得分:19)
int sizePerPage=2;
int page=2;
int from = Math.max(0,page*sizePerPage);
int to = Math.min(list.size(),(page+1)*sizePerPage)
list.subList(from,to)
答案 1 :(得分:19)
使用Java 8流程:
list.stream()
.skip(page * size)
.limit(size)
.collect(Collectors.toCollection(ArrayList::new));
答案 2 :(得分:3)
尝试:
int page = 1; // starts with 0, so we on the 2nd page
int perPage = 2;
String[] list = new String[] {"a", "b", "c", "d", "e", "f"};
String[] subList = null;
int size = list.length;
int from = page * perPage;
int to = (page + 1) * perPage;
to = to < size ? to : size;
if ( from < size ) {
subList = Arrays.copyOfRange(list, from, to);
}
答案 3 :(得分:2)
简单方法
Query::setEncoding()
答案 4 :(得分:1)
试试这个:
int pagesize = 2;
int currentpage = 2;
list.subList(pagesize*(currentpage-1), pagesize*currentpage);
此代码返回仅包含所需元素的列表(页面)。
您还应该检查索引以避免java.lang.IndexOutOfBoundsException。
答案 5 :(得分:0)
根据您的问题,简单List.subList
会给您预期的行为
size()/ 2 =页数
答案 6 :(得分:0)
您可以List.subList
使用Math.min
来防范ArrayIndexOutOfBoundsException
:
List<String> list = Arrays.asList("a", "b", "c", "d", "e");
int pageSize = 2;
for (int i=0; i < list.size(); i += pageSize) {
System.out.println(list.subList(i, Math.min(list.size(), i + pageSize)));
}