Comparator接口实现排序

Comparator接口实现排序InterfaceCom T 对任意类型集合对象进行整体排序 排序时将此接口的实现传递给 Collections sort 方法或者 Arrays sort 方法排序 实现 intcompare To1 To2 方法 返回正数 零 负数各代表大于 等于 小于 单一条件排序 举例 List Student stus newArrayList lt amp Student T

Interface Comparator 
   
  

单一条件排序:

举例:

 List 
  
    stus = new ArrayList 
   
     (){ { add(new Student("张三", 30)); add(new Student("李四", 20)); add(new Student("王五", 60)); } }; // 1.对学生集合按年龄进行排序 Collections.sort(stus, new Comparator 
    
      () { @Override public int compare(Student s1, Student s2) { // 升序 //return s1.getAge()-s2.getAge(); return s1.getAge().compareTo(s2.getAge()); // 降序 // return s2.getAge()-s1.getAge(); // return s2.getAge().compareTo(s1.getAge()); } }); // 2.对学生集合按姓名首字母排序 Comparator comparator = Collator.getInstance(Locale.CHINA); Collections.sort(stus, new Comparator 
     
       () { @Override public int compare(Student s1, Student s2) { return comparator.compare(s1.getName(), s2.getName()); } }); // 输出结果 ... 
      
     
    
  

注: 还可以使用lambda表达式简化代码, 前提是JDK8开发环境, 如下:

 List 
  
    stus = new ArrayList 
   
     (){ { add(new Student("张三", 30)); add(new Student("李四", 20)); add(new Student("王五", 60)); } }; //对学生集合按年龄进行排序 Collections.sort(stus, (s1,s2)->(s1.getAge()-s2.getAge())); 
    
  

lambda表达式是JDK8新特性之一, 允许你通过表达式来代替功能接口; 细节请自行百度… 我也是刚接触, 啊哈哈, 不熟悉,谅解谅解

多条件排序:

举例:

 List 
  
    stus = new ArrayList 
   
     (){ { add(new Student("张三", 30, 1)); add(new Student("李四", 20, 2)); add(new Student("王五", 40, 3)); add(new Student("赵六", 30, 4)); add(new Student("陈七", 40, 5)); add(new Student("周八", 20, 6)); } }; Collections.sort(stus,new Comparator 
    
      () { @Override public int compare(Student s1, Student s2) { int flag; // 首选按年龄升序排序 flag = s1.getAge()-s2.getAge(); if(flag==0){ // 再按学号升序排序 flag = s1.getNum()-s2.getNum(); } return flag; } }); System.out.println("年龄 学号 姓名 "); for(Student s : stus){ System.out.println(s.getAge()+" "+s.getNum()+" "+s.getName()); } 
     
    
  

自定义条件排序

 String[] order = {"语文","数学","英语","物理","化学","生物","政治","历史","地理","总分"}; final List 
  
    definedOrder = Arrays.asList(order); List 
   
     list = new ArrayList 
    
      (){ { add("总分"); add("英语"); add("政治"); add("总分"); add("数学"); } }; Collections.sort(list,new Comparator 
     
       () { @Override public int compare(String o1, String o2) { int io1 = definedOrder .indexOf(o1); int io2 = definedOrder .indexOf(o2); return io1-io2; } }); for(String s:list){ System.out.print(s+" "); } 
      
     
    
  

使用lambda表达式简化代码:

Collections.sort(list, (o1, o2)->(definedOrder .indexOf(o1)-definedOrder .indexOf(o2))); 
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/199921.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月20日 上午11:55
下一篇 2026年3月20日 上午11:55


相关推荐

  • 2026最新OpenClaw Windows保姆级安装教程:从原生到WSL2,手把手带你“养虾”避坑

    2026最新OpenClaw Windows保姆级安装教程:从原生到WSL2,手把手带你“养虾”避坑

    2026年3月16日
    1
  • idea2022.01.13激活码【最新永久激活】2022.02.24

    (idea2022.01.13激活码)最近有小伙伴私信我,问我这边有没有免费的intellijIdea的激活码,然后我将全栈君台教程分享给他了。激活成功之后他一直表示感谢,哈哈~IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.net/100143.html…

    2022年4月1日
    89
  • 七牛云大数据平台建设实践

    七牛云大数据平台建设实践七牛云CEO许式伟首次披露七牛云在大数据方向的产品思路。

    2022年6月9日
    31
  • vpp命令总结_gdb调试命令总结

    vpp命令总结_gdb调试命令总结createsubBondEthernet0834创建子接口,tag是834setinterfaceiptableBondEthernet0.8341将此接口设置在fib1里setinterfaceipaddressBondEthernet0.834192.168.0.250/24设置接口ipsetinterfaces

    2025年7月31日
    8
  • Mysql数据库中的各种锁「建议收藏」

    Mysql数据库中的各种锁「建议收藏」在介绍InnoDB与MyIsam的区别时,提到了:InnoDB支持表、行(默认)级锁,而MyISAM支持表级锁本文便着重对Mysql数据库中的锁进行介绍概述相对其他数据库而言,MySQL的锁机制比较简单,其最显著的特点是不同的存储引擎支持不同的锁机制。MySQL大致可归纳为以下3种锁:表级锁:开销小,加锁快;不会出现死锁;锁定粒度大,发生锁冲突的概率最高,并发度最…

    2022年6月11日
    42
  • 图书管理系统课设报告(含用例图、通信图、顺序图、状态图、活动图)

    图书管理系统课设报告(含用例图、通信图、顺序图、状态图、活动图)面向对象的系统分析与设计课程实验报告 1 研究背景及意义学校图书馆希望设计一个图书管理系统 管理读者的登记 图书的购入 借出 归还以及注销等 管理人员还可以查询某位读者 某本图书的当前借阅情况 历史借阅记录 并可按照读者角度 图书角度 借阅角度分别进行统计 给出统计报表 以全面掌握图书的流通情况 目前图书馆为手工管理 读者办理借阅等手续麻烦 而且管理员工作量打 开发这个系统最主要是方便管理 读者可以咋计算机上查询 预订图书 不须到图书馆直接去查找 这样节省了很多时间 管理员也可以再计算机

    2026年3月17日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号