我有3 List
不同類型的Objects
。 例如:Java分頁列表
List
A
包含64
元素。
List
B
包含33
元素。
List
C
包含515
元素。
因此,總共有612
元素。
我想讓組(Pagination
)100
元素,例如,它應該是這樣的:
頁1
:List
A
:64
元/ List
B
:33
元/ List
C
:3
元素
頁面2
:List
A
:0
elements/List
B
:0
元件/ List
C
:100
元件
頁3
:List
A
:0
元件/ List
B
:0
元件/ List
C
:100
元件
頁4
:List
A
:0
元件/ List
B
:0
元件/ List
C
:100
元件
頁5
:List
A
:0
元件/ List
B
:0
元件/ List
C
:100
元件
頁6
:List
A
:0
元件/ List
B
: 0
elements/List
C
:100
元素
頁7
:List
A
:0
元/ List
B
:0
元/ List
C
:12
元素
我的想法是創建一個Map<Integer, List<List>
,其中key
將是Page
和value
一個List
其中包含3個Lists
(每個List
A
,B
或C
)。
這裏是我的代碼:
int totalPages = 0;
int totalElements = listA.size() + listB.size() + listC.size();
if(totalElements % PAGE_SIZE == 0) {
totalPages = totalElements/PAGE_SIZE;
}else {
totalPages = (totalElements/PAGE_SIZE) + 1;
}
Map<Integer, List<List<ParentObject>>> paginatedMap = new HashMap<Integer, List<List<ParentObject>>>();
for(int i=0; i<totalPages; i++) {
List<List<ParentObject>> list = new LinkedList<List<ParentObject>>();
List<ObjectA> subListA = new LinkedList<ObjectA>();
List<ObjectB> subListB = new LinkedList<ObjectB>();
List<ObjectC> subListC = new LinkedList<ObjectC>();
int total = 0;
if(total <= PAGE_SIZE) {
subListA.addAll(listA.subList(0, (PAGE_SIZE-total)-1));
listA.removeAll(listA.subList(0, (PAGE_SIZE-total)-1));
total = total + subListA.size();
}
if(total <= PAGE_SIZE) {
subListB.addAll(listB.subList(0, (PAGE_SIZE-total)-1));
listB.removeAll(listB.subList(0, (PAGE_SIZE-total)-1));
total = total + subListB.size();
}
if(total <= PAGE_SIZE) {
subListC.addAll(listC.subList(0, (PAGE_SIZE-total)-1));
listC.removeAll(listC.subList(0, (PAGE_SIZE-total)-1));
total = total + subListC.size();
}
list.add(subListA);
list.add(subListB);
list.add(subListC);
paginatedMap.put(i, list);
}
其中PAGE_SIZE
是100
這是不工作,因爲我當然需要檢查多少元素每個list
包含調用subList
method
之前。
我想我走錯了路,但我沒有看到另一種方式來做到這一點。
任何想法?
謝謝!
最後我得到它的工作。 這裏是代碼:
private Map<Integer, List<List<MyObject>>> paginateDataRequest(List<List<MyObject>> requestLists, double pageSize) {
Map<Integer, List<List<MyObject>>> result = new LinkedHashMap<Integer, List<List<MyObject>>>();
int totalElements = 0;
//We calculate the total of the elements contained in the requestLists.
for(List<MyObject> subList : requestLists) {
if(subList != null) {
totalElements += subList.size();
}
}
//We round it up. The result Map will contain x pages with {pageSize} elements each one. For example, if the total amount of request is 101,
//our Map will have 2 pages (100 elements + 1 element)
int totalRequests = (int)Math.ceil(totalElements/pageSize);
//We iterate over each page
for(int i=0; i<totalRequests; i++) {
List<List<MyObject>> entry = new LinkedList<List<MyObject>>();
int freeElements = (int)pageSize;
for(List<MyObject> list : requestLists) {
List<MyObject> subList = new LinkedList<MyObject>();
if(freeElements > 0) {
if(list.size() > freeElements) {
subList.addAll(list.subList(0, freeElements));
}else {
subList.addAll(list);
}
//We update the left free elements
freeElements -= subList.size();
}
entry.add(subList);
list.removeAll(subList);
}
//We add a new page to the result Map
result.put(i, entry);
}
return result;
}
謝謝大家的幫助!