Interface Comparator<T>

对任意类型集合对象进行整体排序,排序时将此接口的实现传递给Collections.sort方法或者Arrays.sort方法排序.
实现int compare(T o1, T o2)方法。

单一条件排序:

举例:

     List<Student> stus = new ArrayList<Student>(){{add(new Student("张三", 30));   add(new Student("李四", 20));   add(new Student("王五", 60));   }};// 1.对学生集合按年龄进行排序Collections.sort(stus, new Comparator<Student>() {@Overridepublic 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<Student>() {@Overridepublic int compare(Student s1, Student s2) {return comparator.compare(s1.getName(), s2.getName());}});// 输出结果...

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

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

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

多条件排序:

举例:

     List<Student> stus = new ArrayList<Student>(){{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<Student>() {@Overridepublic 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<String> definedOrder = Arrays.asList(order);List<String> list = new ArrayList<String>(){{add("总分");add("英语");add("政治");add("总分");add("数学");}};Collections.sort(list,new Comparator<String>() {@Overridepublic 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)));

输出结果:

Comparator接口实现排序相关推荐

  1. 用Comparator接口进行排序 --java

    问题描述: 用Comparator接口对下列四位同学的成绩做降 *序排序,如果成绩一样,那在成绩排序的基础上按照年龄由小到大排序. 解决: 首先了解什么是Comparator? -----比较器接口. ...

  2. Java入门第121课——使用Comparator接口实现排序

    问题 使用Comparator接口实现对集合中的元素排序,详细要求如下: 1)使用ArrayList构建集合对象cells,该集合中要求存储Cell类型的数据. 2)分别构造行和列为(2,3).(5, ...

  3. java arraylist comparable_Java 两种ArrayList集合自定义对象属性排序,Comparator接口 或 Comparable接口...

    1,Comparator接口 -- 重写Comparator public class User { private String id; private String name; public Us ...

  4. Java之——利用Comparator接口对多个排序条件进行处理

    转载自:http://blog.csdn.net/l1028386804/article/details/56513205 膜拜大神··· 一.需求 假设现在有个如此的需求:需要对一个这样的雇员列表进 ...

  5. 【错误记录】Java 中 ArrayList 排序 ( 使用 Comparator 接口时注意 compare 返回值是 -1 和 +1 )

    文章目录 一.报错信息 二.解决方案 一.报错信息 使用 Comparator 接口 , 对 ArrayList 集合中的元素排序无效 ; 打印之后没有进行排序 ; 错误代码就不贴出来了 , 随便搜索 ...

  6. Java 中类的比较与排序方法(应用Comparable接口与Comparator接口)通俗易懂

    引言 在平时写Java的程序的时候,如果要进行一些基本类型的变量的比较,可以很方便得调用Math.max().Math.min()等方法,如果要对数组或者列表进行排序,也可以用Arrays.sort( ...

  7. 使用Comparable、Comparator接口实现对对象数组、List集合自定义排序

    1.实现对象数组排序 (1)方法一,需要排序的对象所属的类实现Comparable接口,复写 comparaTo方法  (2)方法二,需要排序的对象所属的类已经完成无法实现Comparable接口,这 ...

  8. java实现什么接口进行排序_使用Java中Comparator接口实现自定义排序

    一般情况下,自己动手写一个简单排序程序还是没有问题的,但是你能保证写出来的排序程序的时间复杂度吗?你能保证程序的正确性吗,鲁棒性呢,还有程序结构的清晰性,可维护性.......综上所述,学习一下排序接 ...

  9. java8 comparator接口_Java8 Comparator 排序方法

    Java8 中 Comparator 接口提供了一些静态方法,可以方便于我们进行排序操作,下面通过例子讲解下如何使用 对整数列表排序(升序) List list = Arrays.asList(1, ...

最新文章

  1. java异常类型和基本处理原则_Java异常控制机制和异常处理原则
  2. 滴滴自动驾驶获得江苏省苏州公安局颁发的路测牌照
  3. 使用JQuery Autocomplete插件(一)
  4. linux的磁盘磁头瓷片作用,Linux 磁盘管理
  5. 大创项目实施方案模板范文_27篇互联网电商创业计划书范文+34个电商行业商业计划书模板下载...
  6. python--html to pdf
  7. 阿里90后工程师,如何用AI程序写出双11打call歌?
  8. (原创)UML要点总结
  9. java代码逆向工程生成uml
  10. android4.4安全性,[原创]Android第二代加固(support 4.4-8.1)
  11. 管理新语:主管不要当传声筒,要检查、核实
  12. python狗屁不通文章生成器_狗屁不通文章生成器,哈哈哈
  13. linux的打包压缩文件,linux打包文件,压缩文件
  14. PaaS建设有什么意义,能够给企业带来哪些价值?
  15. Windows10两台电脑通过网线进行文件共享
  16. NTL的安装、连接与使用(基于CentOS、Clion)
  17. Java获得随机汉字
  18. 图像识别VPU——易用的嵌入式AI支持深度学习平台介绍
  19. java netty wss_netty中websocket, wss
  20. 【航线运输驾驶员理论考试】航空规章

热门文章

  1. 个性化测试学生评测软件,电教目录:学生心理测评软件,心理测试系统,学生心理档案管理系统...
  2. 华为路由器 批量生成NAT映射配置
  3. Hexi Flexi Grid Layout
  4. 2021葫芦岛市第六高级中学高考成绩查询,2021年葫芦岛高考状元是谁分数多少分,历年葫芦岛高考状元名单...
  5. 特征因子是什么意思_尺度因子是什么意思
  6. fcpx插件:38项视频滤镜Yanobox Moods
  7. 新手零基础学PR速成课福利
  8. 直播类软件的测试用例,直播类软件测试都包括哪些方面?测试工具都有哪些?...
  9. 毕业设计-基于微信小程序的医院远程挂号系统
  10. 武汉理工计算机保研去向,武汉理工大学2020届保研率14.8%(感谢网友@909578090)...