如何在列表上实现分页?[已关闭]
2022-09-02 04:59:33
是否有任何库可用于实现列表的分页?
假设我有10行的空间,用户可以选择是否要按页面向前或向后滚动(因此+- 10个项目)。例如,这可能由 控制。-1, 0, +1
构建一个类(如果没有足够的项可供显示)防止向后/向前滚动,以及自保存用户当前所在页面上的状态,这可能是一项繁重的工作。
那么有什么吗?
是否有任何库可用于实现列表的分页?
假设我有10行的空间,用户可以选择是否要按页面向前或向后滚动(因此+- 10个项目)。例如,这可能由 控制。-1, 0, +1
构建一个类(如果没有足够的项可供显示)防止向后/向前滚动,以及自保存用户当前所在页面上的状态,这可能是一项繁重的工作。
那么有什么吗?
小优化,如果你真的不想创建任何新列表。
/**
* returns a view (not a new list) of the sourceList for the
* range based on page and pageSize
* @param sourceList
* @param page, page number should start from 1
* @param pageSize
* @return
* custom error can be given instead of returning emptyList
*/
public static <T> List<T> getPage(List<T> sourceList, int page, int pageSize) {
if(pageSize <= 0 || page <= 0) {
throw new IllegalArgumentException("invalid page size: " + pageSize);
}
int fromIndex = (page - 1) * pageSize;
if(sourceList == null || sourceList.size() <= fromIndex){
return Collections.emptyList();
}
// toIndex exclusive
return sourceList.subList(fromIndex, Math.min(fromIndex + pageSize, sourceList.size()));
}
我以前已经解决了这个问题。我制作了一个静态 getPages 方法,它将泛型集合分解为页面列表(也是列表)。我提供了下面的代码。
public static <T> List<List<T>> getPages(Collection<T> c, Integer pageSize) {
if (c == null)
return Collections.emptyList();
List<T> list = new ArrayList<T>(c);
if (pageSize == null || pageSize <= 0 || pageSize > list.size())
pageSize = list.size();
int numPages = (int) Math.ceil((double)list.size() / (double)pageSize);
List<List<T>> pages = new ArrayList<List<T>>(numPages);
for (int pageNum = 0; pageNum < numPages;)
pages.add(list.subList(pageNum * pageSize, Math.min(++pageNum * pageSize, list.size())));
return pages;
}