gpt4 book ai didi

java - 对 ArrayList 进行分页

转载 作者:行者123 更新时间:2023-11-29 06:00:30 27 4
gpt4 key购买 nike

我正在尝试为 ArrayList 中保存的值创建一个简单的分页例程。基本上我想要做的是首先渲染 ArrayList 中的前五个元素。然后当用户点击 Next(再增加 5)Previous(减少 5)

我的逻辑是这样的:

class foo
{
private static final int defaultStep = 5;
private int moveCounter;
private List<String> values;

public foo()
{
values = new ArrayList<String>();
values.add("Fiber Channel");
values.add("Copper Channel");
...
}

private void pageNext()
{
if (moveCounter > -1 && moveCounter < values.size())
{
int currentIndex = (moveCounter + 1);
renderValues(currentIndex, false);
}
}

private void pagePrevious()
{
if (moveCounter > -1 && moveCounter <= values.size())
{
renderValues(moveCounter-1, true);
}
}

private void renderValues(int startIndex, boolean isPreviousCall)
{
if (startIndex > -1)
{
StringBuilder html = new StringBuilder();
List<String> valuesToRender = new ArrayList<String>();
int checkSteps = 1;
while (startIndex < values.size())
{
valuesToRender.add(values.get(startIndex));
if (checkSteps == defaultStep) break;
startIndex++;
checkSteps++;
}
moveCounter = startIndex;

//TODO: Build html String
...
}
}
}

我对 pagePrevious 调用有问题,你们能帮我构建 valuesToRender 5-steps up values array 在将要呈现的值添加到 valuesToRender 数组之前。

我也试过这样做:

  for (int start = startIndex, end = values.size() - 1; start < end; start++, end--)
{
if (isPreviousCall) valuesToRender.add(values.get(end));
else valuesToRender.add(values.get(start));

if (checkSteps == defaultStep) break;
checkSteps++;
}

但这似乎也不起作用。你们能发现并帮助我解决这个问题吗?谢谢大家。

最佳答案

基于“pscuderi”solution here我已经构建了一个包装类,可以帮助寻找这个的人:

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class PaginatedList<T> {

private static final int DEFAULT_PAGE_SIZE = 10;

private List<T> list;
private List<List<T>> listOfPages;
private int pageSize = DEFAULT_PAGE_SIZE;
private int currentPage = 0;

public PaginatedList(List<T> list) {
this.list = list;
initPages();
}

public PaginatedList(List<T> list, int pageSize) {
this.list = list;
this.pageSize = pageSize;
initPages();
}

public List<T> getPage(int pageNumber) {
if (listOfPages == null ||
pageNumber > listOfPages.size() ||
pageNumber < 1) {
return Collections.emptyList();
}

currentPage = pageNumber;
List<T> page = listOfPages.get(--pageNumber);
return page;
}

public int numberOfPages() {
if (listOfPages == null) {
return 0;
}

return listOfPages.size();
}

public List<T> nextPage() {
List<T> page = getPage(++currentPage);
return page;
}

public List<T> previousPage() {
List<T> page = getPage(--currentPage);
return page;
}

public void initPages() {
if (list == null || listOfPages != null) {
return;
}

if (pageSize <= 0 || pageSize > list.size()) {
pageSize = list.size();
}

int numOfPages = (int) Math.ceil((double) list.size() / (double) pageSize);
listOfPages = new ArrayList<List<T>>(numOfPages);
for (int pageNum = 0; pageNum < numOfPages;) {
int from = pageNum * pageSize;
int to = Math.min(++pageNum * pageSize, list.size());
listOfPages.add(list.subList(from, to));
}
}

public static void main(String[] args) {
List<Integer> list = new ArrayList<Integer>();
for (int i = 1; i <= 62; i++) {
list.add(i);
}

PaginatedList<Integer> paginatedList = new PaginatedList<Integer>(list);
while (true) {
List<Integer> page = paginatedList.nextPage();
if (page == null || page.isEmpty()) {
break;
}

for (Integer value : page) {
System.out.println(value);
}

System.out.println("------------");
}
}

}

关于java - 对 ArrayList 进行分页,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10313627/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com