javaList<Map<String, Object>>升序、降序

举报
Java李杨勇 发表于 2022/08/31 20:34:16 2022/08/31
【摘要】 我们再开发项目的时候经常会用到排序功能,一般常见的就是在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

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。