【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)是负数为倒序正数为正序


【最后】


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

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

目录
相关文章
|
3天前
|
Java 程序员 图形学
程序员教你用代码制作飞翔的小鸟--Java小游戏,正好拿去和给女神一起玩
《飞扬的小鸟》Java实现摘要:使用IntelliJ IDEA和JDK 16开发,包含小鸟类`Bird`,处理小鸟的位置、速度和碰撞检测。代码示例展示小鸟图像的加载、绘制与旋转。同时有`Music`类用于循环播放背景音乐。游戏运行时检查小鸟是否撞到地面、柱子或星星,并实现翅膀煽动效果。简单易懂,可直接复制使用。
|
1天前
|
SQL Java
java处理数据查看范围
java处理数据查看范围
|
2天前
|
Java
代码实例演示Java字符串与输入流互转
代码实例演示Java字符串与输入流互转
|
2天前
|
存储 安全 Java
掌握8条泛型规则,打造优雅通用的Java代码
掌握8条泛型规则,打造优雅通用的Java代码
掌握8条泛型规则,打造优雅通用的Java代码
|
3天前
|
数据库连接
java+ssm+vue代码视频学习讲解
java+ssm+vue代码视频学习讲解
6 0
|
3天前
|
SQL 缓存 算法
优化你的Java代码:性能调优技巧
优化你的Java代码:性能调优技巧
10 0
|
4天前
|
数据采集 机器学习/深度学习 Java
数据猎手:使用Java和Apache HttpComponents库下载Facebook图像
本文介绍了如何使用Java和Apache HttpComponents库从Facebook获取图像数据。通过设置爬虫代理IP以避免限制,利用HttpClient发送请求,解析HTML找到图像链接,然后下载并保存图片。提供的Java代码示例展示了实现过程,包括创建代理配置、线程池,以及下载图片的逻辑。注意,实际应用需根据Facebook页面结构进行调整。
数据猎手:使用Java和Apache HttpComponents库下载Facebook图像
|
4天前
|
Java 编译器 程序员
Java一分钟之第一行Java代码:输出"Hello, World!"
【5月更文挑战第7天】本文引导初学者编写运行第一个Java程序——打印&quot;Hello, World!&quot;,介绍基本代码结构及常见问题。包括语法错误(如缺少分号、缩进不规范)、编译运行问题(忘记编译、运行错误)和环境配置问题(JDK未安装、环境变量未设置)。建议检查语法、熟悉编译运行流程并正确安装配置JDK。通过实战演练,从编写到运行,迈出Java编程第一步。
17 0
|
5天前
|
Java
接口在增强Java代码的灵活性方面起着关键作用
Java接口增强代码灵活性,实现多态性、解耦、多继承和扩展性。通过接口,类可隐藏实现细节,实现抽象化,促进模块化和维护性。接口定义方法,允许不同类实现,减少依赖,便于测试和修改。同时,接口提供多继承解决方案,使代码更具扩展性,易于添加新功能。
23 4
|
Java
Java - Map 使用 Comparator 排序
Java - Map 使用 Comparator 排序
521 0