`

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

 

分享到:
评论

相关推荐

    Bootstrap分页

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

    mybatisIntercept.zip

    List&lt;Map, Object&gt;&gt; list= mapper.getConditionsPage(page , condition , recognitionresult, starttime , endtime); //page 设置必须在里接口实现层实现 且Page类必须为方法的第一个参数 page.setResults(list);...

    cms后台管理

    &lt;entry key="cms_content_list" value-ref="cms_content_list"/&gt; …… &lt;/map&gt; &lt;/property&gt; &lt;property name="templateLoaderPath" value=""/&gt; …… &lt;/bean&gt; &lt;/property&gt; &lt;/bean&gt; &lt;/beans&gt; 此外,在配置文件...

    springmybatis

    查询出列表,也就是返回list, 在我们这个例子中也就是 List&lt;User&gt; , 这种方式返回数据,需要在User.xml 里面配置返回的类型 resultMap, 注意不是 resultType, 而这个resultMap 所对应的应该是我们自己配置的 ...

    苹果8XPC和手机二合一完整版

    MAC.Cookie.Set(name,value,days) 设置cookie的值; name=cookie名称,value=cookie值,days=过期时间 MAC.Cookie.Get(name) 获取cookie的值; name=cookie名称 MAC.Cookie.Del(name) 删除cookie的值; name=cookie名称 ...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part2

     14.5.1 在数据库中对集合排序  14.5.2 在内存中对集合排序  14.6 映射组件类型集合  14.7 小结  14.8 思考题 第15章 映射实体关联关系  15.1 映射一对一关联  15.1.1 按照外键映射   15.1.2 按照主键映射 ...

    Awake说明文档中遗漏的部分(复选框、主键超链用法)

    输出到通用列表jsp页面的request中包含两个 对象,"head" 和 "grid" Head:是列表头信息包含宽度和中文名 Grid:是列表数据,包含id和记录信息 grid对象是一个LinkedHashMap,map中的key 是记录主键,迭代的时候可以...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part4

     14.5.1 在数据库中对集合排序  14.5.2 在内存中对集合排序  14.6 映射组件类型集合  14.7 小结  14.8 思考题 第15章 映射实体关联关系  15.1 映射一对一关联  15.1.1 按照外键映射   15.1.2 按照主键映射 ...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part3

     14.5.1 在数据库中对集合排序  14.5.2 在内存中对集合排序  14.6 映射组件类型集合  14.7 小结  14.8 思考题 第15章 映射实体关联关系  15.1 映射一对一关联  15.1.1 按照外键映射   15.1.2 按照主键映射 ...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part1.rar

     14.5.1 在数据库中对集合排序  14.5.2 在内存中对集合排序  14.6 映射组件类型集合  14.7 小结  14.8 思考题 第15章 映射实体关联关系  15.1 映射一对一关联  15.1.1 按照外键映射   15.1.2 按照主键映射 ...

    bug解决思路.txt

    List&lt;SysLogInfo&gt; listSysLogInfo(Map map); // 查询总数量 Integer getLogInfoCount(Map map); } &lt;!DOCTYPE html&gt; &lt;html lang="en" xmlns:th="http://www.thymeleaf.org"&gt; &lt;head&gt; &lt;meta ...

    基于SSM框架+Mysql的企业CRM客户关系管理系统项目源码+数据库+项目说明.zip

    2、本项目适合作为计算机、数学、电子信息等专业的课程设计、期末大作业和毕设项目,作为参考资料学习借鉴。 3、本资源作为“参考资料”如果需要实现其他功能,需要能看懂代码,并且热爱钻研,自行调试。 基于SSM...

    JAVA面试题最全集

    一、Java基础知识 1.Java有那些基本数据类型,String是不是基本...这个方法是由垃圾收集器在确定这个对象没有被引用时对这个对象调用的。它是在 Object 类中定义的,因此所有的类都继承了它。子类覆盖 finalize() ...

    最全Hibernate 参考文档

    14.1. 大小写敏感性问题 14.2. from子句 14.3. 关联(Association)与连接(Join) 14.4. select子句 14.5. 聚集函数 14.6. 多态查询 14.7. where子句 14.8. 表达式 14.9. order by子句 14.10. group by子句 14.11. 子...

    Hibernate3+中文参考文档

    14.1. 大小写敏感性问题 14.2. from子句 14.3. 关联(Association)与连接(Join) 14.4. select子句 14.5. 聚集函数 14.6. 多态查询 14.7. where子句 14.8. 表达式 14.9. order by子句 14.10. group by子句 14.11. 子...

    hibernate 框架详解

    大小写敏感性问题 15.2. from子句 15.3. 关联(Association)与连接(Join) 15.4. select子句 15.5. 聚集函数 15.6. 多态查询 15.7. where子句 15.8. 表达式 15.9. order by子句 15.10. group by子句 15.11....

    hibernate 体系结构与配置 参考文档(html)

    大小写敏感性问题 14.2. from子句 14.3. 关联(Association)与连接(Join) 14.4. join 语法的形式 14.5. select子句 14.6. 聚集函数 14.7. 多态查询 14.8. where子句 14.9. 表达式 14.10. order by子句 ...

    hibernate3.04中文文档.chm

    15.1. 大小写敏感性问题 15.2. from子句 15.3. 关联(Association)与连接(Join) 15.4. select子句 15.5. 聚集函数 15.6. 多态查询 15.7. where子句 15.8. 表达式 15.9. order by子句 15.10. group by子句 ...

    Hibernate教程

    15.1. 大小写敏感性问题 15.2. from子句 15.3. 关联(Association)与连接(Join) 15.4. select子句 15.5. 聚集函数 15.6. 多态查询 15.7. where子句 15.8. 表达式 15.9. order by子句 15.10. group by子句 ...

Global site tag (gtag.js) - Google Analytics