javaList<Map<String, Object>>升序、降序
【摘要】 我们再开发项目的时候经常会用到排序功能,一般常见的就是在Java程序中对列表集合进行排序。例如,所有用户的数据是从第三方界面获得的,但默认情况下,列表是按用户编号id之类的从小到大排序的,项目中刚好需要对用户成绩汇总 然后进行排序在前端显示。这个时候我们需要对列表集执行自定义排序。一般来说有三种常见的列表排序方法:使用Comparable排序;使用Comparator排序;如果环境是JDK1...
我们再开发项目的时候经常会用到排序功能,一般常见的就是在Java程序中对列表集合进行排序。例如,所有用户的数据是从第三方界面获得的,但默认情况下,列表是按用户编号id之类的从小到大排序的,项目中刚好需要对用户成绩汇总 然后进行排序在前端显示。这个时候我们需要对列表集执行自定义排序。
一般来说有三种常见的列表排序方法:
使用Comparable排序;
使用Comparator排序;
如果环境是JDK1.8或更高版本,还可以使用Stream流进行排序。
我自己使用的是实现Comparator来进行排序的,Comparable 是类内部的比较方法,而 Comparator 是排序类外部的比较器。使用 Comparator 比较器,无需修改原类,只需要扩充一个类的比较器就行了,Comparator 的实现方法有以下两种:
新建 Comparator 比较器;
使用 Comparator 匿名类比较器。
主要代码如下!也比较简单,对2个map根据特定的字段进行排序。
进行降序:
static class MapComparatorDesc implements Comparator<Map<String, Object>> {
@Override
public int compare(Map<String, Object> m1, Map<String, Object> m2) {
Double v1 = Double.valueOf(m1.get("avgScore").toString());
Double v2 = Double.valueOf(m2.get("avgScore").toString());
if (v2 != null) {
return v2.compareTo(v1);
}
return 0;
}
}
进行升序:
static class MapComparatorAsc implements Comparator> {
@Override
public int compare(Map m1, Map m2) {
Doublev1 = Double.valueOf(m1.get("avgScore").toString());
Doublev2 = Double.valueOf(m2.get("avgScore").toString());
if(v1 != null){
return v1.compareTo(v2);
}
使用:
Collections.sort(mapList, new MapComparatorDesc());
需要注意的是如果排序字段中可能出现null值,要使用 Comparator.nullsXXX 进行排序处理就可以解决。
Comparator.nullsFirst 表示将排序字段中的 null 值放到集合最前面,如果想要将 null 值放到集合最后面可以使用 Comparator.nullsLast了。特记录,方便各位码友学习使用。
如果觉得本文对你有帮助,不妨点赞收藏起来把,说不定下次要用就找不到了呢。
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)