根据 menu_level,sort排序,越小的越前面。
compareTo当前面小于后面的时候,返回-1。也就是说如果要倒序,那么只要返回1即可。
--
下面代码按照升序规则进行!
--
Collections.sort(menuList, new Comparator<Map<String, Object>>() {
@Override
public int compare(Map<String, Object> o1, Map<String, Object> o2) {
// 进行判断
int cpLevel=((Integer) o1.get("menu_level")).compareTo((Integer) o2.get("menu_level"));
Integer sort1=(o1.get("sort")==null)?10000:(Integer) o1.get("sort");
Integer sort2=(o2.get("sort")==null)?10000:(Integer) o2.get("sort");
int cpSort=sort1.compareTo(sort2);
if (cpLevel==1) {
return 1;
}
else if(cpLevel==0) {
return cpSort;
}
else {
return -1;
}
//return ;
}
});
---
后文是3个key的比较。
譬如有数据表books,它们的数据如下:select * from books order by author,price desc,publisher
2 | 102 | 生命在于运动 | lml | 1000.00 | 中华出版社 |
5 | 103 | 2020年异象 | lml | 90.00 | 福建出版社 |
9 | 108 | 以史鉴今 | lml | 90.00 | 西安出版社 |
4 | 104 | 奋斗在上海 | lzf | 1000.00 | publzf |
8 | 107 | 学习方法论 | lzf | 99.00 | 中天出版社 |
7 | 106 | 论自力更生的必要性 | lzf | 99.00 | 秦皇汉武 |
3 | 1498591124 | Professional Java for Web Applications | Nicholas S. Williams | 59.99 | John Wiley & Sons |
6 | 105 | 21世纪-中国-前进 | 五十 | 83.00 | 附件出版社 |
现在希望通过java排序(虽然一般不这么做):
代码如下:
@Override public List<Map<String, Object>> sortByNKeys() { String sql = "select author,price,publisher,isbn,title from books"; List<Map<String, Object>> bookList = jdbcTp.queryForList(sql); // 使用java 8的 stream 功能进行排序 // order by author,price desc,publisher /** * 升序返回-1,倒序返回1即可 有多个key需要比较的时候(不考虑null或者""的情况),当第n个key返回的是0的时候继续比较,如果不是 * 则根据第n个key的比较值返回需要的结果。 譬如第1个key的比较结果是0,则比骄傲第2个, 假定第二的key的比较结果是-1 * 如果要根据第二个倒序,则返回1;如果要根据第二个升序,则直接发那会-1即可 以此类推 */ Collections.sort(bookList, new Comparator<Map<String, Object>>() { @Override public int compare(Map<String, Object> o1, Map<String, Object> o2) { // 进行判断 int cp1 = ((String) o1.get("author")).compareTo((String) o2 .get("author")); BigDecimal price1 = new BigDecimal(o1.get("price").toString()); BigDecimal price2 = new BigDecimal(o1.get("price").toString()); int cp2 = price1.compareTo(price2); String p1 = o1.get("publisher").toString(); String p2 = o2.get("publisher").toString(); int cp3 = p1.compareTo(p2); if (cp1 == 0) { if (cp2 == 0) { if (cp3 == 0) { return 0; } else { return cp3; } } else { return cp2 * -1; } } else { return cp1; } // return ; } }); return bookList; }
结果输入如下:
[{ "author": "Nicholas S. Williams", "price": 59.99, "publisher": "John Wiley & Sons", "isbn": "1498591124", "title": "Professional Java for Web Applications" }, { "author": "lml", "price": 1000.00, "publisher": "中华出版社", "isbn": "102", "title": "生命在于运动" }, { "author": "lml", "price": 90.00, "publisher": "福建出版社", "isbn": "103", "title": "2020年异象" }, { "author": "lml", "price": 90.00, "publisher": "西安出版社", "isbn": "108", "title": "以史鉴今" }, { "author": "lzf", "price": 1000.00, "publisher": "publzf", "isbn": "104", "title": "奋斗在上海" }, { "author": "lzf", "price": 99.00, "publisher": "中天出版社", "isbn": "107", "title": "学习方法论" }, { "author": "lzf", "price": 99.00, "publisher": "秦皇汉武", "isbn": "106", "title": "论自力更生的必要性" }, { "author": "五十", "price": 83.00, "publisher": "附件出版社", "isbn": "105", "title": "21世纪-中国-前进" }]
注:之所以,有所区别,是因为mysql比较的时候,默认不考虑大小写;而java字符串的CompareTo则是按照unicode编码比较进行的。