/** * 分页 * @param currentNo 当前页 * @param pageSize 每页数量 * @param resultList 数据源 * @return */ Page<Map<String, String>> page(int currentNo,int pageSize,List<Map<String, String>> resultList){ currentNo = (currentNo < 1) ? 1 : currentNo; //总页数 int maxPage = resultList.size() % pageSize != 0 ? (resultList.size() / pageSize) + 1 : (resultList.size() / pageSize); if(currentNo > maxPage){ currentNo = 1; } int fromIndex = pageSize * (currentNo - 1); int toIndex = fromIndex + pageSize; if(maxPage == currentNo){//最后一页 toIndex = resultList.size(); } List<Map<String, String>> subList = resultList.subList(fromIndex, toIndex); return new Page<Map<String, String>>(fromIndex, resultList.size(), pageSize, subList); }
Page类--------------------------------------------
package import java.io.Serializable; import java.util.Collections; import java.util.List; public class Page<T> implements Serializable { private static final long serialVersionUID = -8478562630743994981L; public static int DEFAULT_DISPLAY_PAGE_COUNT = 10; // 默认展示最多页数 private static int DEFAULT_PAGE_SIZE = 20; private int pageSize = DEFAULT_PAGE_SIZE; // 每页的记录数 private int start; // 当前页第一条数据在List中的位置,从0开始 private List<T> data = Collections.emptyList(); // 当前页中存放的记录 private int totalCount = 0; // 总记录数 private int pageCount = DEFAULT_DISPLAY_PAGE_COUNT;// 展示最多页数,默认值为DEFAULT_DISPLAY_PAGE_COUNT /** * 构造方法,只构造空页. */ public Page() { this(1, 0, DEFAULT_PAGE_SIZE, Collections.<T> emptyList()); } /** * 构造方法,只构造空页,pageSize不变 */ public Page(int pageSize) { this(1, 0, pageSize, Collections.<T> emptyList()); } /** * 默认构造方法. * @param start 本页数据在数据库中的起始位置 * @param totalSize 数据库中总记录条数 * @param pageSize 本页容量 * @param data 本页包含的数据 */ public Page(int start, int totalSize, int pageSize, List<T> data) { this.pageSize = pageSize; this.start = start; this.totalCount = totalSize; this.data = data; } /** 取总记录数 */ public int getTotalCount() { return this.totalCount; } /** 取总页数 */ public int getTotalPageCount() { if (totalCount % pageSize == 0) return totalCount / pageSize; else return totalCount / pageSize + 1; } /** 取每页数据容量 */ public int getPageSize() { return pageSize; } /** 取当前页中的记录 */ public List<T> getResult() { return data; } /** 取该页当前页码,页码从1开始 */ public int getCurrentPageNo() { return start / pageSize + 1; } public int getPageNo() { return getCurrentPageNo(); } /** 该页是否有下一页 */ public boolean isHasNextPage() { return this.getCurrentPageNo() < this.getTotalPageCount(); } /** 该页是否有上一页 */ public boolean isHasPreviousPage() { return this.getCurrentPageNo() > 1; } /** * 取下一页的页码 */ public int getNextPageNo() { if (isHasNextPage()) { return getCurrentPageNo() + 1; } return getCurrentPageNo(); } /** * 取上一页的页码 */ public int getPreviousPageNo() { if (isHasPreviousPage()) { return getCurrentPageNo() - 1; } return getCurrentPageNo(); } /** * 取首页的页码 */ public int getFirstPageNo() { return 1; } /** * 取尾页的页码 */ public int getLastPageNo() { return getTotalPageCount(); } /** * 取展示页码集 */ public int[] getDisplayNos() { // 仅1页 if (getTotalPageCount() == 1) { return null; } // 总页数不足展示页数 if (getTotalPageCount() <= pageCount) { int[] nos = new int[getTotalPageCount()]; for (int i = 0; i < nos.length; i++) { nos[i] = i + 1; } return nos; } // 当前页小于展示页码一半,重头总展示 if (getCurrentPageNo() <= pageCount / 2) { int[] nos = new int[pageCount]; for (int i = 0; i < nos.length; i++) { nos[i] = i + 1; } return nos; } // 当前页与总页数差小于展示页一半,从尾部展示 if ((getTotalPageCount() - getCurrentPageNo()) <= pageCount / 2) { int[] nos = new int[pageCount]; for (int i = getLastPageNo() - pageCount, j = 0; j < pageCount; i++, j++) { nos[j] = i + 1; } return nos; } // 前后各取一半 int[] nos = new int[pageCount]; for (int i = getCurrentPageNo() - pageCount / 2, j = 0;j < pageCount;i++, j++) { nos[j] = i + 1; } return nos; } /** 获取任一页第一条数据在数据集的位置,每页条数使用默认值 */ protected static int getStartOfPage(int pageNo) { return getStartOfPage(pageNo, DEFAULT_PAGE_SIZE); } /** * 获取任一页第一条数据在数据集的位置. * @param pageNo 从1开始的页号 * @param pageSize 每页记录条数 * @return 该页第一条数据 */ public static int getStartOfPage(int pageNo, int pageSize) { return (pageNo - 1) * pageSize; } /** * @param pageCount the pageCount to set */ public void setPageCount(int pageCount) { this.pageCount = pageCount; } }
相关推荐
在这个项目中,开发者无需依赖外部SQL数据库文件,而是通过在代码中创建List集合来模拟数据源,简化了学习过程。 1. **ListView控件**:ListView是ASP.NET中的一个高度可定制的数据绑定控件,它可以灵活地呈现数据...
根据这些参数,我们可以从数据库或者其他数据源获取对应的数据,并使用`JsonResult`返回JSON格式的结果,其中`total`字段表示总条目数,`rows`字段是当前页的数据。 此外,为了增强用户体验,我们还可以添加排序、...
当设置好Pagination后,我们需要将Pagination的change事件监听器添加到DataGrid,当用户点击分页按钮时,这个事件会被触发,更新DataGrid的数据源。通常,数据源需要支持按页查询,例如使用PagingMemoryProxy或与...
ListView通过Adapter来绑定数据,Adapter是连接ListView和数据源的桥梁。在Android中,常见的Adapter有BaseAdapter、ArrayAdapter等,开发者可以根据实际需求选择合适的Adapter实现。 为了实现上拉加载更多的功能,...
6. **合并多个Page对象**:在处理多数据源或合并查询结果时,可能需要将多个Page对象合并成一个大的Page对象。 总的来说,“Page类之非SQL查询Java假分页”是Java开发中一个实用的技术,通过自定义类来实现非SQL...
在这个例子中,我们模拟了一个简单的数据源,并根据请求的页面号(`page`)和每页条目数(`rows`)来计算并返回相应数据。实际应用中,你需要将`data`变量替换为从数据库或其他API获取的数据。 最后,别忘了在`...
在分页查询时,Hibernate可以通过HQL(Hibernate Query Language)或SQL来实现,结合Criteria API,可以方便地获取指定范围的数据,并且支持动态SQL生成,以适应不同的分页需求。 3. **Spring框架**: Spring作为...
2. **自定义数据源**:由于我们的目标是无需数据库,我们可以创建一个模拟数据的列表,如`List<string>`或`List<自定义对象>`。在`Page_Load`事件中,根据当前页码加载对应的数据。 ```csharp protected void Page_...
private List<string> GetData() // 这里应该从实际数据源获取数据 { // 返回模拟数据 return new List() { "数据1", "数据2", ..., "数据N" }; } } ``` 上述代码中,`SetupPrinting`方法用于初始化打印设置,...
3. **绑定数据源**: 将联系人数据集合(例如ArrayList)与ListContainer进行绑定。这可以通过Adapter类实现,Adapter会根据数据源创建对应的列表项视图。 4. **设置适配器**: 实现自定义的Adapter,覆盖其中的`...
`DataGridView`不直接提供分页,但可以通过更改数据源的子集或实现`ISupportInitialize`接口来模拟。 9. **数据验证**:可以使用`RowValidating`和`CellValidating`事件来进行数据输入验证,确保输入符合业务规则。...
// 这里模拟数据获取,实际应用中应从数据库或其他数据源获取 var allData = Enumerable.Range(1, totalRecords).ToList(); var startIndex = (pageNumber - 1) * pageSize; var currentPageData = allData.Skip...
`paging-jetpack-compose`和`compose-load-more`标签表明项目可能包含了具体的分页库或自定义实现,用于处理数据源的分页逻辑和加载更多的交互。这可能包括初始化加载第一页,以及在用户滚动到底部时触发加载下一页...
1. 数据获取:首先,你需要一个数据源,例如服务器API接口,返回一部分数据。在用户滚动到ListView底部时,发送请求获取下一页的数据。 2. 监听滚动事件:在ListView中,你可以通过添加OnScrollListener监听滚动...
在分页场景中,这个JavaBean会包含获取数据源、计算总页数、以及获取当前页数据的方法。例如,我们可以创建一个`PageBean`类,它拥有`totalItems`(总记录数)、`pageSize`(每页显示数量)、`currentPage`(当前...
在多线程环境中,`TestGridView`可能包含用于模拟数据加载或更新的代码,确保在更新GridView的同时,正确处理线程同步问题。这可能涉及到锁机制,如`lock`语句,或者使用`System.Threading.Tasks.Task`和`async/...
在实际应用中,我们会创建一些模拟用户数据,以便于测试和展示功能。 **增删改查**(CRUD)是数据库操作的基础。在SSM框架下,这四个操作可以通过Service层的方法来实现。例如,创建用户时,Service会调用MyBatis的...
3. **数据绑定**:将歌曲信息存储在结构化的数据源中,如数组、列表或数据库,然后将这些数据绑定到List控件上。 4. **优化性能**:考虑到大量歌曲可能导致性能问题,需要对数据加载和渲染进行优化,例如分页加载、...
这个简单的连接器示例为开发者提供了一个基础模板,他们可以根据需求进行修改和扩展,适应不同的数据源和用户界面需求。无论是在企业级应用还是个人项目中,理解并掌握这种数据加载策略对于提升用户体验和优化性能都...
// 分页数据源 int page = Integer.parseInt(request.getParameter("page")); // 当前得到第几页的记录 int length = 0; // 记录当前拿了多少条 StringBuffer sb = new StringBuffer(); sb.append("["); if ...