`

Map按value排序(由大到小-由小到大),对List列表分页

阅读更多

 

一,Map排序

①Map按key排序

 

Map<String, Integer> sqrMap = Maps.newLinkedHashMap();
sqrMap = ...
List<String> allList = Lists.newLinkedList(sqrMap.keySet());
Collects.sort(allList);

 

②Map按value排序(由小到大)

 

 

Map<String, Integer> sqrMap = Maps.newLinkedHashMap();
ArrayList<Entry<String,Integer>> allList = Lists.newArrayList(sqrMap.entrySet());    
Collections.sort(allList, new Comparator<Map.Entry<String, Integer>>() {    
	 public int compare(Map.Entry<String, Integer> o1, Map.Entry<String, Integer> o2) {    
	           Integer v1 = o1.getValue();
	           Integer v2 = o2.getValue();
	           return v1.compareTo(v2);  
	 } 
});  

 

 

③Map按value排序(由大到小)

 

Map<String, Integer> sqrMap = Maps.newLinkedHashMap();
ArrayList<Entry<String,Integer>> allList = Lists.newArrayList(sqrMap.entrySet());    
 Collections.sort(allList, new Comparator<Map.Entry<String, Integer>>() {    
	 public int compare(Map.Entry<String, Integer> o1, Map.Entry<String, Integer> o2) {  
	            	Integer v1 = o1.getValue();
	            	Integer v2 = o2.getValue();
	            	Integer result = v2 - v1;
	            	if(result > 0){
	            		 return 1;
	            	}else if(result==0){
	            		return 0;
	            	}else{
	            		return -1;
	            	}
	   }
});  

 

 

二、在统计中,经常遇到非数据库数据的统计,这里我们使用List分页,结合Map来统计。

 

①、在ModelView controller里面获取分页列表。

 

ListPageModel<String> sqrListPage = getListPage(request,"pageNo", "pageSize");
view.addObject("sqrListPage",sqrListPage);

 

②、在页面代码

 

 

<table id="sqrTable" width="100%" cellpadding="0" cellspacing="0">
<tr class="title-1"><td>店铺名称</td></tr>
<c:forEach var="sqr" items="${sqrListPage.list }">
<tr><td>${sqr }</td></tr>
</c:forEach>
</table>
<div class="list-page">${sqrListPage}</div>

 

③、封装的getListPage方法

 

@SuppressWarnings({ "unchecked", "rawtypes" })
	private ListPageModel<String> getListPage(HttpServletRequest _request,String _pageNo,String _pageSize){
		int pageNo =  getIntParams(_request, _pageNo, 1);
		int pageSize = getIntParams(_request, _pageSize, Constant.MIN_DEFAULT_PAGE_SIZE);
		ListPageModel<String> listPage = null;
		Map<String, Integer> sqrMap = Maps.newLinkedHashMap();
		sqrMap.put("可人优品", 56);
		sqrMap.put("唯品衣秀", 12);
		sqrMap.put("温暖衣橱", 20);
		ArrayList<Entry<String,Integer>> allList = Lists.newArrayList(sqrMap.entrySet());    
        Collections.sort(allList, new Comparator<Map.Entry<String, Integer>>() {    
            public int compare(Map.Entry<String, Integer> o1, Map.Entry<String, Integer> o2) {  
            	Integer v1 = o1.getValue();
            	Integer v2 = o2.getValue();
            	Integer result = v2 - v1;
            	if(result > 0){
            		 return 1;
            	}else if(result==0){
            		return 0;
            	}else{
            		return -1;
            	}
            }
        });  
		listPage = new ListPageModel(allList,pageSize);
        List<String> sqrList = listPage.getObjects(pageNo);
        listPage.setList(sqrList);
		return listPage;
	}

 

 ④分页工具类

public class ListPageModel<T> {
	private int currPageNo = 1; // 当前页
	private int totalPages = 0; // 总页数
	private int pageSize = Constant.MIN_DEFAULT_PAGE_SIZE;
	private int totalRows = 0; // 总数据数
	private int pageStartRow = 0;// 每页的起始数
	private int pageEndRow = 0; // 每页显示数据的终止数
	private boolean hasNextPage = false; // 是否有下一页
	private boolean hasPreviousPage = false; // 是否有前一页
	private List<T> list;

	public ListPageModel(List<T> list, int pageSize) {
		init(list, pageSize);// 通过对象集,记录总数划分
	}

	/**
	 * 初始化list,并告之该list每页的记录数
	 * 
	 * @param list
	 * @param pageSize
	 */
	public void init(List<T> list, int pageSize) {
		this.pageSize = pageSize;
		this.list = list;
		totalRows = list.size();
		hasPreviousPage = false;
		if ((totalRows % pageSize) == 0) {
			totalPages = totalRows / pageSize;
		} else {
			totalPages = totalRows / pageSize + 1;
		}

		if (currPageNo >= totalPages) {
			hasNextPage = false;
		} else {
			hasNextPage = true;
		}

		if (totalRows < pageSize) {
			this.pageStartRow = 0;
			this.pageEndRow = totalRows;
		} else {
			this.pageStartRow = 0;
			this.pageEndRow = pageSize;
		}
	}
	
	/**
	 * 获取第几页的内容
	 * 
	 * @param page
	 * @return
	 */
	public List<T> getObjects(int page) {
		if (page == 0){
			this.setCurrPageNo(1);
		}else{
			this.setCurrPageNo(page);
		}
		this.disposePage();
		if (page * pageSize < totalRows) {// 判断是否为最后一页
			pageEndRow = page * pageSize;
			pageStartRow = pageEndRow - pageSize;
		} else {
			pageEndRow = totalRows;
			pageStartRow = pageSize * (totalPages - 1);
		}

		List<T> objects = null;
		if (!list.isEmpty()) {
			objects = list.subList(pageStartRow, pageEndRow);
		}
		return objects;
	}
	
	/**
	 * 处理分页
	 */
	private void disposePage() {
		if (currPageNo == 0) {
			currPageNo = 1;
		}
		if ((currPageNo - 1) > 0) {
			hasPreviousPage = true;
		} else {
			hasPreviousPage = false;
		}

		if (currPageNo >= totalPages) {
			hasNextPage = false;
		} else {
			hasNextPage = true;
		}
	}

	/**
	 * 获取下一页
	 * @return
	 */
	public List<T> getNextPage() {
		currPageNo = currPageNo + 1;
		disposePage();
		return getObjects(currPageNo);
	}

	
	/**
	 * 获取上一页
	 * @return
	 */
	public List<T> getPreviousPage() {
		currPageNo = currPageNo - 1;
		if ((currPageNo - 1) > 0) {
			hasPreviousPage = true;
		} else {
			hasPreviousPage = false;
		}
		if (currPageNo >= totalPages) {
			hasNextPage = false;
		} else {
			hasNextPage = true;
		}
		return getObjects(currPageNo);
	}

//	public void description() {
//		String description = "共有数据数:" + this.getTotalRows() +
//		"共有页数: " + this.getTotalPages() +
//		"当前页数为:" + this.getPage() +
//		" 是否有前一页: " + this.isHasPreviousPage() +
//		" 是否有下一页:" + this.isHasNextPage() +
//		" 开始行数:" + this.getPageStartRow() +
//		" 终止行数:" + this.getPageEndRow();
//		System.out.println(description);
//	}

	/**
	 * 判断是否有下一页
	 * @return
	 */
	public boolean isNext() {
		return list.size() > 5;
	}
	
	/**
	 * 获取首页
	 * @return
	 */
	public List<T> getFistPage() {
		if (this.isNext()) {
			return list.subList(0, pageSize);
		} else {
			return list;
		}
	}

	public boolean isHasNextPage() {
		return hasNextPage;
	}
	
	public boolean isHasPreviousPage() {
		return hasPreviousPage;
	}

	//=====================================getter or setter===============================================
	public void setHasPreviousPage(boolean hasPreviousPage) {
		this.hasPreviousPage = hasPreviousPage;
	}
	
	public void setHasNextPage(boolean hasNextPage) {
		this.hasNextPage = hasNextPage;
	}

	public List<T> getList() {
		return list;
	}

	public void setList(List<T> list) {
		this.list = list;
	}

	public int getCurrPageNo() {
		return currPageNo;
	}

	public void setCurrPageNo(int currPageNo) {
		this.currPageNo = currPageNo;
	}

	public int getPageEndRow() {
		return pageEndRow;
	}

	public void setPageEndRow(int pageEndRow) {
		this.pageEndRow = pageEndRow;
	}

	public int getPageSize() {
		return pageSize;
	}

	public void setPageSize(int pageSize) {
		this.pageSize = pageSize;
	}

	public int getPageStartRow() {
		return pageStartRow;
	}

	public void setPageStartRow(int pageStartRow) {
		this.pageStartRow = pageStartRow;
	}

	public int getTotalPages() {
		return totalPages;
	}

	public void setTotalPages(int totalPages) {
		this.totalPages = totalPages;
	}

	public int getTotalRows() {
		return totalRows;
	}

	public void setTotalRows(int totalRows) {
		this.totalRows = totalRows;
	}
	
	//================================分页=================================
	private String funcName = "listpage"; 
	public String getFuncName() {
		return funcName;
	}
	public void setFuncName(String funcName) {
		this.funcName = funcName;
	}
	/**
	 * 默认输出当前分页标签 <div class="page">${page}</div>
	 */
	@Override
	public String toString() {
		String div1="<div class=\"total-pages fl\">" + currPageNo  + "/" + totalPages + "</div>\n";
		StringBuilder div2=new StringBuilder();
		div2.append("<div class=\"pagination\">\n<ul>\n");
		if (currPageNo==1) {// 如果是首页
			div2.append("<li class=\"pglink pre\"><a href=\"javascript:\" title=\"上一页\" class=\"disabled\"><span><i></i></span></a></li>\n");
		} else {
			div2.append("<li class=\"pglink pre\"><a href=\"javascript:" + getFuncName() + "(" + (currPageNo - 1) + ","+ pageSize + ");\" title=\"上一页\"><span><i></i></span></a></li>\n");
		}
		if (currPageNo == totalPages) {
			div2.append("<li class=\"pglink next\"><a href=\"javascript:\" title=\"下一页\" class=\"disabled\"><span><i></i></span></a></li>\n");
		} else {
			div2.append("<li class=\"pglink next\"><a href=\"javascript:" + getFuncName() + "(" + (currPageNo + 1) + "," + pageSize + ");\" title=\"下一页\">" + "<span><i></i></span></a></li>\n");
		}
		div2.append("<li class=\"skippage\">第<input type=\"text\" id=\"rePageNo\" value=\""+currPageNo+"\" class=\"input-mini\"/>页</li>\n");
		div2.append("<li class=\"\"><a title=\"跳转\" onclick=\"javascript:" + getFuncName() + "($(this).parent().parent().find('#rePageNo').val()," + pageSize + ");\" target=\"_self\"/><span>GO</span></a></li>\n");
		div2.append("</ul>\n</div>\n");
		
		StringBuilder sb = new StringBuilder();
		sb.append(div1).append(div2);
		sb.insert(0,"<div class=\"pager original-state\">\n").append("</div>\n");
		return sb.toString();
	}
}

 

 

欢迎来我的小店看看》》》《可人优品》》》

原文地址:http://vipshow.iteye.com/blog/2038026

 

分享到:
评论

相关推荐

    Java Map 集合类简介

    `putAll(Map t)`方法用于将一个Map的所有映射复制到另一个Map,虽然它的效率并不总是高于连续多次调用`put()`,但在调整Map大小方面可能会有所优势。 **查看和遍历Map** Map中的元素不能像List那样直接通过索引来...

    Mybatis分页插件 PageHelper5.0.0 使用

    public List&lt;Sys_user&gt; selectByPageCondition(Map, Object&gt; map) { int pageNo = Integer.parseInt(map.get("pageNo").toString()); int pageSize = Integer.parseInt(map.get("pageSize").toString()); ...

    js对c#listbox排序

    body: JSON.stringify(options.map(o =&gt; o.value)) }) .then(response =&gt; response.json()) .then(data =&gt; { // 处理服务器返回的数据,如确认排序成功等 }) .catch(error =&gt; { console.error('Error:', ...

    013-MyBatis分页插件-PageHelper1

    public Map, Object&gt; listStudents(@RequestParam(value = "userName", required = false) String userName) { Page&lt;Student&gt; page = studentService.findStudentsByUserName(userName); Map, Object&gt; result = ...

    中软培训-实现分页功能.md

    这个类包含了分页所需的各个属性,如当前页、页面大小、数据列表等。 ```java public class PageInfo&lt;T&gt; { private int currentPage; // 当前页面 private int pageSize; // 一个页面显示几个房型 private List...

    Hibernate中分页查询的封装。

    总的来说,Hibernate的分页查询封装涉及到对Criteria或HQL的熟练运用,以及对数据库查询优化的理解。合理地封装分页查询能提高代码的可复用性和可维护性,同时为用户提供更好的性能体验。在项目开发中,可以根据具体...

    ssm 实现分页

    在SSM框架中,分页主要涉及到MyBatis的动态SQL和Spring的Page对象。 MyBatis的动态SQL是实现分页的关键。通过在Mapper XML文件中编写带有条件的SQL语句,我们可以根据当前页码和每页数量动态生成分页查询。例如: ...

    PageHelper分页插件的使用

    PageHelper 是一个专门为 MyBatis 设计的高效且易用的分页插件,它能够无缝地集成到 SpringMVC 框架中。在处理大量数据时,分页是必不可少的功能,它不仅可以提高用户体验,还能有效降低服务器的负载。PageHelper ...

    Bootstrap分页

    List list = this.userService.getUserLists(map); this.initResult(model, list, map); return new ModelAndView("pagerList"); } catch (Exception e) { e.printStackTrace(); } return ...

    datagrid分页

    在 EasyUI 中,DataGrid 是一个用于展示表格数据的强大组件,它支持排序、分页、过滤等多种功能。分页功能允许我们按需加载数据,提高页面响应速度,同时也提高了用户体验。在实际应用中,我们通常需要配置分页相关...

    sturts框架下返回json数据 list map 对象

    另外,对于大数据量的JSON输出,考虑分页和优化数据传输,减少网络负担。 7. **使用JSON插件**:Struts2还提供了JSON插件(struts2-json-plugin),它可以简化JSON的配置和使用,提供更丰富的功能,如自定义JSON...

    ayer分页.pdf

    根据提供的信息,我们可以详细探讨关于`layer`分页工具类及其使用方法的相关知识点。 ### 一、`layer`分页工具类概述 #### 1. 类定义与作用 `Page`类位于`com.website.commons.web.utils`包下,主要用于实现分页...

    springboot结合jpa实现分页,动态多条件查询

    在本文中,我们将深入探讨如何在Spring Boot项目中利用Java Persistence API (JPA) 实现分页和动态多条件查询,并结合Thymeleaf模板引擎展示数据。Spring Boot以其简化配置和快速启动的优势,已经成为现代Java开发的...

    Android 将json数据的key和value动态加载到listview

    JSON由键值对组成,键(key)是字符串,值(value)可以是各种数据类型,如字符串、数字、数组、对象等。在本例中,JSON的key将作为ListView的标题项,value则作为标题对应的详细内容。 1. **解析JSON数据**:首先...

    Xwork+iBatis分页

    这种方式使得JSP页面的代码保持简洁,只需要处理分页的导航,而复杂的分页逻辑则交由后台处理,提高了代码的可读性和维护性。当然,实际项目中可能还需要考虑其他因素,比如查询优化、异常处理等,但基础的分页实现...

    springboot_pager(分页).zip

    在这个"springboot_pager(分页).zip"压缩包中,我们可以找到一个完整的SpringBoot集成PageHelper的小程序,这个程序可以帮助开发者快速理解和实践如何在SpringBoot项目中使用PageHelper进行分页操作。 **SpringBoot...

    ajax实现分页

    ### 使用SSM框架中的Ajax实现自定义分页数据 在Web开发中,为了提升用户体验、减少服务器负担,分页功能的实现变得尤为重要。而在实际应用中,Ajax技术因其能够实现局部刷新、异步加载等功能而被广泛应用于动态加载...

    springboot专栏 007springboot整合mybatis-plus增删改查 ModelAndView jsp 分页

    最后,创建JSP页面`userList.jsp`,用于显示用户列表和分页信息: ```jsp ;charset=UTF-8" language="java" %&gt; 用户列表 姓名 年龄 操作 ${users}" var="user"&gt; ${user.name} ${user.age} ...

    mybatis逆向工程分页查询方法

    MyBatis逆向工程是一种快速构建SQL映射文件和实体类的方法,极大地简化了数据库模型层的开发工作。在这个主题中,我们将深入探讨如何在MyBatis逆向工程的基础上实现分页查询,这对于任何Java Web开发者来说都是必备...

Global site tag (gtag.js) - Google Analytics