我们来自这里: Java Paginated List
在这篇旧帖中,我需要分别List
Object
个Map
。最后我解决了它创建一个private Map<Integer, List<List<MyObject>>> paginateRequest(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;
}
,如下所示:
totalRequests
现在我意识到当{{1}}包含一个高值(超过100个元素)时,这段代码在Android 4设备上运行得非常慢。在Android&gt; = 5上需要大约7-8秒,但在Android 4.4上需要超过30-40秒(我在Android模拟器上测试过它)。
我无法理解Android版本有什么问题,它与Android完全无关,它只是Java操作。
我也不知道如何改进它,我知道有很多插入操作,并且在高数量的元素上循环是昂贵的但我没有看到另一种方法来更有效地实现它。
有什么想法吗? 提前谢谢。