Java多条件排序使用Comparator和thenComparing【包含排序List<Map<String, String>>】

2024-03-27 1464阅读

温馨提示:这篇文章已超过374天没有更新,请注意相关的内容是否还可用!

Java多条件排序使用Comparator和thenComparing

    • Comparator接口简介
    • 使用Comparator排序
    • 使用thenComparing实现多条件排序
    • 使用thenComparing排序Map

      在Java中,对一个列表或集合进行排序时,经常需要基于多个条件来排序。幸运的是,Java提供了强大的Comparator接口,以及thenComparing方法,使我们能够轻松地实现多条件排序。

      Comparator接口简介

      Comparator接口是Java用于自定义对象排序的关键接口。它包含了一个compare方法,允许我们定义如何比较两个对象。通常,我们会使用Comparator来排序列表或集合中的自定义对象。

      使用Comparator排序

      首先,让我们看看如何使用Comparator来对一个包含自定义对象的列表进行排序。假设我们有一个包含学生对象的列表,每个学生对象都有姓名和分数属性。

      class Student {
          String name;
          int score;
          // 构造函数和其他方法省略
      }
      

      我们想要按照分数从高到低排序,可以使用Comparator:

      List students = new ArrayList();
      // 填充学生列表
      students.sort(new Comparator() {
          @Override
          public int compare(Student s1, Student s2) {
              return s2.score - s1.score; // 按分数降序排序
          }
      });
      

      这将按照学生的分数降序排序列表。

      使用thenComparing实现多条件排序

      有时,我们需要按照多个条件进行排序,比如首先按分数降序排序,然后按照姓名升序排序。这时,thenComparing方法派上用场。

      students.sort(Comparator.comparing((Student s) -> s.score)
              .reversed()
              .thenComparing(s -> s.name));
      
      • Comparator.comparing 方法用于指定首要排序条件,这里是分数,.reversed() 用于指定降序排序。
      • 紧接着,我们使用 thenComparing 方法,指定次要排序条件,这里是姓名。

        这个排序操作将首先按照分数降序排序,然后如果分数相同,将按照姓名升序排序。

        当使用方法引用的方式来创建 Comparator 时,可以使用类名 :: 属性名的语法。

        students.sort(Comparator.comparing(Student::getScore).reversed()
                .thenComparing(Student::getName));
        

        在这个示例中,我们使用 Student::getScore 来引用 Student 类中的 getScore 方法,这与直接使用 lambda 表达式 s -> s.getScore() 具有相同的效果。同样,我们也使用 Student::getName 引用了 getName 方法,以便按照姓名进行次要排序。这使得代码更加简洁和可读,但效果是一样的。

        使用thenComparing排序Map

        有时,我们需要对包含键值对的Map进行排序,也可以使用thenComparing方法。假设我们有一个包含多个属性的Map列表,并且需要按照这些属性依次排序。

        List compareResults = new ArrayList();
        // 填充Map列表
        compareResults = compareResults.stream()
                .sorted(Comparator.comparing((Map i) -> i.get("bgsj"))
                        .thenComparing(i -> i.get("bgnr"))
                        .thenComparing(i -> i.get("bgzd"))
                        .thenComparing(i -> i.get("bgzj")))
                .collect(Collectors.toList());
        

        在这个示例中,我们有一个compareResults列表,其中包含了多个Map对象,每个Map表示一条变更信息,包括"bgsj"(变更时间)、“bgnr”(变更内容)、“bgzd”(变更字段)和"bgzj"(变更ID)属性。我们使用thenComparing方法来对compareResults列表进行多条件排序。

        • 首先,我们使用Comparator.comparing方法按照"bgsj"字段进行排序。
        • 如果"bgsj"相同,我们使用thenComparing方法按照"bgnr"字段进行排序。
        • 如果"bgnr"也相同,继续使用thenComparing方法按照"bgzd"字段进行排序。
        • 最后,如果"bgzd"也相同,将按照"bgzj"字段进行排序。

          这使得我们可以按照多个条件对compareResults列表进行排序,以满足不同排序需求。

          多条件排序是Java中非常有用的功能,可以帮助您处理各种排序需求,无论是对自定义对象的排序还是对包含键值对的Map的排序。使用Comparator接口和thenComparing方法,可以轻松实现这些需求,使您的代码更加灵活和强大。

          版权声明:

          原创博主:牛哄哄的柯南

          博主原文链接:https://keafmd.blog.csdn.net/

          个人博客链接:https://www.keafmd.top/

          看完如果对你有帮助,感谢点击下面的点赞支持!

          [哈哈][抱拳]

          Java多条件排序使用Comparator和thenComparing【包含排序List<Map<String, String>>】

          加油!

          共同努力!

          Keafmd

          感谢支持牛哄哄的柯南,期待你的三连+关注~~

          keep accumulate for my dream【共勉】

                                                                 ↓   ↓   ↓   ↓   ↓   ↓  

VPS购买请点击我

免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!

目录[+]