这是啥?

Comparator是个接口,是一个比较器,常用内部类的方式实现,常用于实现某个类的比较规则

怎么用?

场景:假如有一个字符串集合list,一共有10个元素,乱序的。现有排序规则order,根据规则对list重新排序,前4个元素按order排,其余保持原顺序。

定义一个类实现Comparator接口,重写Compare方法

    public static void main(String[] args) {List<String> list = Arrays.asList("皎月", "盲僧", "乌迪尔", "纳尔", "瑞兹", "卡萨", "韦恩", "亚托克斯", "奶妈", "诺手");System.out.println("list = " + list);List<String> order = Arrays.asList("韦恩", "纳尔", "诺手", "乌迪尔");class listCompare implements Comparator<String> {@Overridepublic int compare(String o1, String o2) {// 找到比较元素的索引,如果o1,o2不在order列表中,indexOf方法返回-1int i1 = order.indexOf(o1);int i2 = order.indexOf(o2);i1 = i1 == -1? Integer.MAX_VALUE:i1;i2 = i2 == -1? Integer.MAX_VALUE:i2;return i1-i2;}}list.sort(new listCompare());System.out.println("list = " + list);}

结果怎样?

怎么理解?

先看list.sort(new listCompare());
其实就是一个集合排序,排序的规则就是listCompare类。具体的排序逻辑就是重写的compare方法。
接下来看compare方法

@Override
public int compare(String o1, String o2) {// 找到比较元素的索引,如果o1,o2不在order列表中,indexOf方法返回-1int i1 = order.indexOf(o1);int i2 = order.indexOf(o2);i1 = i1 == -1? Integer.MAX_VALUE:i1;i2 = i2 == -1? Integer.MAX_VALUE:i2;return i1-i2;
}

o1,o2表示两个比较的对象,i1,i2是o1,o2在order集合中的索引,当元素不在集合中时,返回的结果是-1。
当元素不在集合中时,重新赋值为MAX_INTEGER,最大值。
compara方法排序的依据是看return的结果:(和Java默认排序有关,默认按升序排序,所以排后面的值要更大,即i1<i2才行)
i1-i2 < 0,o1排在o2前面
i1-i2 = 0,o1和o2顺序保持不变,并列
i1-i2 > 0,o1排在o2后面

所以,当比较“韦恩”和“盲僧”时,i1 = 0,i2 = MAX_VALUE,i1-i2 < 0,所以“韦恩”排在“盲僧”前面。
从整个order来看,“韦恩"索引为0,所以它是最小的,所以排在最前面。以此类推,找到order剩下的元素。
而不在order中的元素,由于两个元素i1=i2=MAX_VALUE,所以i1-i2=0,两者的相对顺序不改变,即保持原来顺序。

Java Comparator的使用相关推荐

  1. Java Comparator 珍藏版

    点击蓝色"程序猿DD"关注我哟 加个"星标",不忘签到哦 来源:开源技术大全 Java java.util.Comparator功能接口对对象集合强制进行排序. ...

  2. java comparator内部类_java - Java Comparator使用.reverseOrder()但内部类 - 堆栈内存溢出...

    我正在创建一个简单的程序来了解Java Comparator类. 我已经按顺序对一个Arraylist了排序,但现在我想按降序对列表进行排序,但是我在调​​用.reverseOrder()方法时遇到问 ...

  3. 【Java 8 新特性】Java Comparator.naturalOrder | 自然排序

    Java Comparator.naturalOrder | 自然排序 与 Stream.sorted 一起使用 与 Collections.sort 一起使用 与 List.sort 一起使用 与 ...

  4. 【Java 8 新特性】Java Comparator | 比较器

    Java Comparator | 比较器 比较器功能方法:compare(T o1, T o2) 1. 使用 Lambda 表达式定义 compare 2. 自定义 compare 实现比较器 比较 ...

  5. 【Java 8 新特性】Java Comparator.comparing | 提取对象属性,按照指定规则排序

    Java Comparator.comparing | 提取对象属性,按照指定规则排序 Comparator.comparing Comparator.comparingInt Comparator. ...

  6. 【Java 8 新特性】Java Comparator.thenComparing | 添加次级排序方式

    Java Comparator.thenComparing | 添加次级排序方式 Comparator.thenComparing Comparator.thenComparingInt Compar ...

  7. 【Java 8 新特性】Java Comparator.reversed | 倒序排序 - 默认方法

    Java Comparator.reversed | 倒序排序 - 默认方法 在 Stream.sorted 中使用 在 List.sort 中使用 在 Collections.sort 中使用 参考 ...

  8. 【Java 8 新特性】Java Comparator.reverseOrder | 倒序排序-静态方法

    文章目录 在 Stream.sorted 中使用 在 Collections.sort 中使用 在 List.sort 中使用 在 Arrays.sort 中使用 参考文献 Comparator.re ...

  9. 【Java 8 新特性】Java Comparator.nullsFirst | 将空元素被认为小于非空元素

    Java Comparator.nullsFirst | 将空元素被认为小于非空元素 使用 Comparator.nullsFirst 参考文献 nullsFirst是比较器功能接口的静态方法. Ja ...

  10. java comparator compare

    [Java 8 新特性]Java Comparator | 比较器_猫巳的博客-CSDN博客_javacomparator 非常好的文章. 有默认工具方法. 1. 反序 reversed 1. 创建某 ...

最新文章

  1. GT Transceiver的电源控制
  2. C++三大继承构造函数的执行顺序详解
  3. python是动态语言_Python是动态语言:动态添加或删除属性、方法
  4. 华为平板matepad pro鸿蒙,华为MatePad Pro 2平板电脑入网:首款预装鸿蒙OS
  5. bert 是单标签还是多标签 的分类_标签感知的文档表示用于多标签文本分类(EMNLP 2019)...
  6. 详解Python内置函数iter()用法
  7. 知了堂学习笔记-CSS样式整理(一)
  8. python 无法调用turtle_新人求助,关于python 调用turtle《python简单turtle教程》
  9. 微服务之间最佳调用方式是什么?
  10. C语言指针及C++引用
  11. class0:计算机的潜意识——机器学习
  12. 移动平均法,加权平均法
  13. 电脑服务器显示过期,win10系统提示你的设备存在过期风险怎么办_网站服务器运行维护,win10...
  14. php删除头尾空,分享php中去除头尾空格的2种方法
  15. SpringBoot配置文件(1)
  16. mac时间机器占用大量系统盘空间且在访达中无法找到
  17. Salesforce(0):使用VsCode使用Aura组件并展示组件扩展
  18. ffmpeg基础——基本框架介绍
  19. NLP: LDA主题模型
  20. 华为诺亚方舟实验室招聘自动驾驶NeRF算法实习生

热门文章

  1. 【java】【geoserver】java实现对geoserver图层及数据库的数据增删改
  2. Linux初学者必知的5个学习网站
  3. 命题逻辑和谓词逻辑中的tex符号
  4. cmd imp导入dmp文件_imp和exp命令导入和导出.dmp文件
  5. 听音乐看节目是计算机的什么,2014家用电脑既能听音乐又能看影视节目 .doc
  6. 你一定不知道:冬至吃饺子是为了纪念谁?
  7. 【日常】我的扬马最后一小时
  8. 雅特力AT32F403A串口UART8只能接收不能发送问题可能是因为UART8发送信号与XMC字节选信号冲突
  9. 鼓式瞬态成型机 XLN Audio DS-10 Drum Shaper 1.0.5 WiN-MAC
  10. node.js中exports与module.exports的区别