【JAVA】【Collections】【Comparator】返回数据中,根据一个数据索引排序。(完整代码)

简介: 【JAVA】【Collections】【Comparator】返回数据中,根据一个数据索引排序。(完整代码)

一、题目要求


根据图中rise作为参数对(学校人数)索引进行排序。(①升序:由小到大 ②降序:由大到小)


(注:rise是整数型,1是升序,由小到大;0是降序,由大到小)


微信截图_20220519180417.png


二、解题代码


StundentBean.java类


public class StudentBean {
  // 学生名字
  private String sname;
  public String getSname() {
    return sname;
  }
  public void setSname(String sname) {
    this.sname = sname;
  }
}


SchoolVO.java类


import java.util.List;
public class SchoolVO {
  // 学校名字
  private String name;
  // 学校历史
  private String history;
  // 学校年龄
  private Integer age;
  // 学生总数
  private Integer sum;
  // 学校具体信息(班级、学生等信息),?:泛型(可以是实体类,Map等)
  private List<?> list;
  public String getName() {
    return name;
  }
  public void setName(String name) {
    this.name = name;
  }
  public String getHistory() {
    return history;
  }
  public void setHistory(String history) {
    this.history = history;
  }
  public Integer getAge() {
    return age;
  }
  public void setAge(Integer age) {
    this.age = age;
  }
  public List<?> getList() {
    return list;
  }
  public void setList(List<?> list) {
    this.list = list;
  }
  public Integer getSum() {
    return sum;
  }
  public void setSum(Integer sum) {
    this.sum = sum;
  }
}


测试类(方法类)


@GetMapping("/test")
  public Map<String, Object> test(Integer rise) {
    Map<String, Object> map = new HashMap<String, Object>();
    List<SchoolVO> list = new ArrayList<>();
    // 第一中学的情况
    List<StudentBean> students_1 = new ArrayList<>();
    StudentBean xiaoming = new StudentBean();
    StudentBean xiaojun = new StudentBean();
    StudentBean xiaohong = new StudentBean();
    xiaoming.setSname("小明");
    xiaojun.setSname("小军");
    xiaohong.setSname("小红");
    students_1.add(xiaoming);
    students_1.add(xiaojun);
    students_1.add(xiaohong);
    SchoolVO school_1 = new SchoolVO();
    school_1.setName("第一中学");
    school_1.setAge(4);
    school_1.setHistory("第一中学,历史悠久,诞生于2017年");
    school_1.setSum(students_1.size());
    school_1.setList(students_1);
    // 第二中学的情况
    List<StudentBean> students_2 = new ArrayList<>();
    StudentBean xiaohei1 = new StudentBean();
    StudentBean xiaobai1 = new StudentBean();
    StudentBean xiaohei2 = new StudentBean();
    StudentBean xiaobai2 = new StudentBean();
    xiaohei1.setSname("小黑1");
    xiaobai1.setSname("小白1");
    xiaohei2.setSname("小黑2");
    xiaobai2.setSname("小白2");
    students_2.add(xiaohei1);
    students_2.add(xiaobai1);
    students_2.add(xiaohei2);
    students_2.add(xiaobai2);
    SchoolVO school_2 = new SchoolVO();
    school_2.setName("第二中学");
    school_2.setAge(3);
    school_2.setHistory("第二中学,历史悠久,诞生于2018年");
    school_2.setSum(students_2.size());
    school_2.setList(students_2);
    // 第三中学的情况
    List<StudentBean> students_3 = new ArrayList<>();
    StudentBean xiaoxiao = new StudentBean();
    StudentBean xiaotian = new StudentBean();
    xiaoxiao.setSname("小小");
    xiaotian.setSname("小天");
    students_3.add(xiaoxiao);
    students_3.add(xiaotian);
    SchoolVO school_3 = new SchoolVO();
    school_3.setName("第三中学");
    school_3.setAge(3);
    school_3.setHistory("第三中学,历史悠久,诞生于2018年");
    school_3.setSum(students_3.size());
    school_3.setList(students_3);
    // 把三个中学放一起
    list.add(school_1);
    list.add(school_2);
    list.add(school_3);
    // ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓排序功能(核心代码)↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
    if (rise != null && rise == 1) {
      Collections.sort(list, new Comparator<SchoolVO>() {
        @Override
        public int compare(SchoolVO o1, SchoolVO o2) {
          return o1.getSum() - o2.getSum();
        }
      });
    } else if (rise != null && rise == 0) {
      Collections.sort(list, new Comparator<SchoolVO>() {
        @Override
        public int compare(SchoolVO o1, SchoolVO o2) {
          return o2.getSum() - o1.getSum();
        }
      });
    }
    // ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑排序功能(核心代码)↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑
    map.put("data", list);
    map.put("flag", 1);
    map.put("msg", "查询成功");
    return map;
  }


三、测试结果


升序


此时,参数rise为1,发起请求,结果如下:


微信截图_20220519180432.png


降序


此时,参数rise为0,发起请求,结果如下:

微信截图_20220519180443.png


四、核心 Collections.sort 讲解


Collections.sort讲解


Collections.sort方法底层其实就是调用Arrays.sort方法。


Arrays.sort的排序方法是快排(快速排序)和优化的归并排序。


其中,快排是针对基础类型;Object(对象)类型是针对归并排序。


Collections.sort参数情况


new Comparator<Integer>()对象新重写的compare方法

返回值(return)是负数为倒序正数为正序


【最后】


  感谢你看到最后,如果你持有不同的看法,欢迎你在文章下方进行留言、评论。

我是南方者,一个热爱计算机更热爱祖国的南方人。

目录
相关文章
|
5天前
|
JavaScript NoSQL Java
接替此文【下篇-服务端+后台管理】优雅草蜻蜓z系统JAVA版暗影版为例-【蜻蜓z系列通用】-2025年全新项目整合搭建方式-这是独立吃透代码以后首次改变-独立PC版本vue版搭建教程-优雅草卓伊凡
接替此文【下篇-服务端+后台管理】优雅草蜻蜓z系统JAVA版暗影版为例-【蜻蜓z系列通用】-2025年全新项目整合搭建方式-这是独立吃透代码以后首次改变-独立PC版本vue版搭建教程-优雅草卓伊凡
142 96
接替此文【下篇-服务端+后台管理】优雅草蜻蜓z系统JAVA版暗影版为例-【蜻蜓z系列通用】-2025年全新项目整合搭建方式-这是独立吃透代码以后首次改变-独立PC版本vue版搭建教程-优雅草卓伊凡
|
1月前
|
安全 架构师 Java
Java大厂面试高频:Collection 和 Collections 到底咋回答?
Java中的`Collection`和`Collections`是两个容易混淆的概念。`Collection`是集合框架的根接口,定义了集合的基本操作方法,如添加、删除等;而`Collections`是一个工具类,提供了操作集合的静态方法,如排序、查找、同步化等。简单来说,`Collection`关注数据结构,`Collections`则提供功能增强。通过小王的面试经历,我们可以更好地理解这两者的区别及其在实际开发中的应用。希望这篇文章能帮助你掌握这个经典面试题。
44 4
|
16天前
|
存储 NoSQL Java
使用Java和Spring Data构建数据访问层
本文介绍了如何使用 Java 和 Spring Data 构建数据访问层的完整过程。通过创建实体类、存储库接口、服务类和控制器类,实现了对数据库的基本操作。这种方法不仅简化了数据访问层的开发,还提高了代码的可维护性和可读性。通过合理使用 Spring Data 提供的功能,可以大幅提升开发效率。
60 21
|
1天前
|
数据采集 JSON Java
Java爬虫获取微店快递费用item_fee API接口数据实现
本文介绍如何使用Java开发爬虫程序,通过微店API接口获取商品快递费用(item_fee)数据。主要内容包括:微店API接口的使用方法、Java爬虫技术背景、需求分析和技术选型。具体实现步骤为:发送HTTP请求获取数据、解析JSON格式的响应并提取快递费用信息,最后将结果存储到本地文件中。文中还提供了完整的代码示例,并提醒开发者注意授权令牌、接口频率限制及数据合法性等问题。
|
1月前
|
Java 程序员
Java 排序神器:Comparable 和 Comparator 该怎么选?
嗨,大家好,我是小米!今天和大家聊一聊Java社招面试中常考的经典问题——Comparable和Comparator的区别。Comparable定义对象的自然排序,适用于单一固定的排序规则;Comparator则是策略接口,用于定义自定义排序规则,适用于多样化或多变的排序需求。掌握这两者的区别是理解Java排序机制的基础,也是面试中的加分题。结合实际项目场景深入探讨它们的应用,能更好地打动面试官。如果你觉得有帮助,欢迎点赞、收藏、分享,期待你的一键三连!我们下期见~ 我是小米,一个喜欢分享技术的程序员,关注我的微信公众号“软件求生”,获取更多技术干货!
46 20
|
1月前
|
SQL Java 数据库连接
如何在 Java 代码中使用 JSqlParser 解析复杂的 SQL 语句?
大家好,我是 V 哥。JSqlParser 是一个用于解析 SQL 语句的 Java 库,可将 SQL 解析为 Java 对象树,支持多种 SQL 类型(如 `SELECT`、`INSERT` 等)。它适用于 SQL 分析、修改、生成和验证等场景。通过 Maven 或 Gradle 安装后,可以方便地在 Java 代码中使用。
234 11
|
1月前
|
存储 分布式计算 Hadoop
基于Java的Hadoop文件处理系统:高效分布式数据解析与存储
本文介绍了如何借鉴Hadoop的设计思想,使用Java实现其核心功能MapReduce,解决海量数据处理问题。通过类比图书馆管理系统,详细解释了Hadoop的两大组件:HDFS(分布式文件系统)和MapReduce(分布式计算模型)。具体实现了单词统计任务,并扩展支持CSV和JSON格式的数据解析。为了提升性能,引入了Combiner减少中间数据传输,以及自定义Partitioner解决数据倾斜问题。最后总结了Hadoop在大数据处理中的重要性,鼓励Java开发者学习Hadoop以拓展技术边界。
50 7
|
28天前
|
SQL Java 数据库连接
【潜意识Java】深入理解MyBatis的Mapper层,以及让数据访问更高效的详细分析
深入理解MyBatis的Mapper层,以及让数据访问更高效的详细分析
60 1
|
1月前
|
存储 Java BI
java怎么统计每个项目下的每个类别的数据
通过本文,我们详细介绍了如何在Java中统计每个项目下的每个类别的数据,包括数据模型设计、数据存储和统计方法。通过定义 `Category`和 `Project`类,并使用 `ProjectManager`类进行管理,可以轻松实现项目和类别的数据统计。希望本文能够帮助您理解和实现类似的统计需求。
101 17
|
1月前
|
JSON Java 数据挖掘
利用 Java 代码获取淘宝关键字 API 接口
在数字化商业时代,精准把握市场动态与消费者需求是企业成功的关键。淘宝作为中国最大的电商平台之一,其海量数据中蕴含丰富的商业洞察。本文介绍如何通过Java代码高效、合规地获取淘宝关键字API接口数据,帮助商家优化产品布局、制定营销策略。主要内容包括: 1. **淘宝关键字API的价值**:洞察用户需求、优化产品标题与详情、制定营销策略。 2. **获取API接口的步骤**:注册账号、申请权限、搭建Java开发环境、编写调用代码、解析响应数据。 3. **注意事项**:遵守法律法规与平台规则,处理API调用限制。 通过这些步骤,商家可以在激烈的市场竞争中脱颖而出。

热门文章

最新文章