我有對象列表。我需要做分頁。
輸入參數是每個頁面和頁碼的最大數量對象。java分頁util
例如輸入list = ("a", "b", "c", "d", "e", "f")
每頁的最大數目是2 頁號2 結果=( 「C」, 「d」)
是否有任何現成的類(LIBS)做這個?例如Apache項目等。
我有對象列表。我需要做分頁。
輸入參數是每個頁面和頁碼的最大數量對象。java分頁util
例如輸入list = ("a", "b", "c", "d", "e", "f")
每頁的最大數目是2 頁號2 結果=( 「C」, 「d」)
是否有任何現成的類(LIBS)做這個?例如Apache項目等。
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)
使用'(page + 1)* sizePerPage'而不是'page * sizePerPage + sizePerPage'更清潔。 – hsz
是的,你說得對。 –
兩個通知:1)IndexOutOfBoundsException不捕捉2)這是基於0的頁面,而不是1如問題 –
嘗試:
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);
}
這可能會產生ArrayIndexOutOfBoundsException –
@ChristianKuetbach我編輯了我的答案。 – hsz
根據您的問題簡單List.subList
會給你預期的行爲 大小()/ 2 =頁數
你可以使用Math.min
守衛使用List.subList
反對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)));
}
試試這個:
int pagesize = 2;
int currentpage = 2;
list.subList(pagesize*(currentpage-1), pagesize*currentpage);
此代碼返回一個列表,只有你想(頁)的元素。
您應該檢查索引以避免java.lang.IndexOutOfBoundsException。
與Java 8蒸:
list.stream()
.skip(page * size)
.limit(size)
.collect(Collectors.toCollection(ArrayList::new));
簡單的方法
public static <T> List<T> paginate(Page page, List<T> list) {
int fromIndex = (page.getNumPage() - 1) * page.getLenght();
int toIndex = fromIndex + page.getLenght();
if (toIndex > list.size()) {
toIndex = list.size();
}
if (fromIndex > toIndex) {
fromIndex = toIndex;
}
return list.subList(fromIndex, toIndex);
}
它是一個有序列表? –