Java Comparator的使用
这是啥?
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的使用相关推荐
- Java Comparator 珍藏版
点击蓝色"程序猿DD"关注我哟 加个"星标",不忘签到哦 来源:开源技术大全 Java java.util.Comparator功能接口对对象集合强制进行排序. ...
- java comparator内部类_java - Java Comparator使用.reverseOrder()但内部类 - 堆栈内存溢出...
我正在创建一个简单的程序来了解Java Comparator类. 我已经按顺序对一个Arraylist了排序,但现在我想按降序对列表进行排序,但是我在调用.reverseOrder()方法时遇到问 ...
- 【Java 8 新特性】Java Comparator.naturalOrder | 自然排序
Java Comparator.naturalOrder | 自然排序 与 Stream.sorted 一起使用 与 Collections.sort 一起使用 与 List.sort 一起使用 与 ...
- 【Java 8 新特性】Java Comparator | 比较器
Java Comparator | 比较器 比较器功能方法:compare(T o1, T o2) 1. 使用 Lambda 表达式定义 compare 2. 自定义 compare 实现比较器 比较 ...
- 【Java 8 新特性】Java Comparator.comparing | 提取对象属性,按照指定规则排序
Java Comparator.comparing | 提取对象属性,按照指定规则排序 Comparator.comparing Comparator.comparingInt Comparator. ...
- 【Java 8 新特性】Java Comparator.thenComparing | 添加次级排序方式
Java Comparator.thenComparing | 添加次级排序方式 Comparator.thenComparing Comparator.thenComparingInt Compar ...
- 【Java 8 新特性】Java Comparator.reversed | 倒序排序 - 默认方法
Java Comparator.reversed | 倒序排序 - 默认方法 在 Stream.sorted 中使用 在 List.sort 中使用 在 Collections.sort 中使用 参考 ...
- 【Java 8 新特性】Java Comparator.reverseOrder | 倒序排序-静态方法
文章目录 在 Stream.sorted 中使用 在 Collections.sort 中使用 在 List.sort 中使用 在 Arrays.sort 中使用 参考文献 Comparator.re ...
- 【Java 8 新特性】Java Comparator.nullsFirst | 将空元素被认为小于非空元素
Java Comparator.nullsFirst | 将空元素被认为小于非空元素 使用 Comparator.nullsFirst 参考文献 nullsFirst是比较器功能接口的静态方法. Ja ...
- java comparator compare
[Java 8 新特性]Java Comparator | 比较器_猫巳的博客-CSDN博客_javacomparator 非常好的文章. 有默认工具方法. 1. 反序 reversed 1. 创建某 ...
最新文章
- GT Transceiver的电源控制
- C++三大继承构造函数的执行顺序详解
- python是动态语言_Python是动态语言:动态添加或删除属性、方法
- 华为平板matepad pro鸿蒙,华为MatePad Pro 2平板电脑入网:首款预装鸿蒙OS
- bert 是单标签还是多标签 的分类_标签感知的文档表示用于多标签文本分类(EMNLP 2019)...
- 详解Python内置函数iter()用法
- 知了堂学习笔记-CSS样式整理(一)
- python 无法调用turtle_新人求助,关于python 调用turtle《python简单turtle教程》
- 微服务之间最佳调用方式是什么?
- C语言指针及C++引用
- class0:计算机的潜意识——机器学习
- 移动平均法,加权平均法
- 电脑服务器显示过期,win10系统提示你的设备存在过期风险怎么办_网站服务器运行维护,win10...
- php删除头尾空,分享php中去除头尾空格的2种方法
- SpringBoot配置文件(1)
- mac时间机器占用大量系统盘空间且在访达中无法找到
- Salesforce(0):使用VsCode使用Aura组件并展示组件扩展
- ffmpeg基础——基本框架介绍
- NLP: LDA主题模型
- 华为诺亚方舟实验室招聘自动驾驶NeRF算法实习生
热门文章
- 【java】【geoserver】java实现对geoserver图层及数据库的数据增删改
- Linux初学者必知的5个学习网站
- 命题逻辑和谓词逻辑中的tex符号
- cmd imp导入dmp文件_imp和exp命令导入和导出.dmp文件
- 听音乐看节目是计算机的什么,2014家用电脑既能听音乐又能看影视节目 .doc
- 你一定不知道:冬至吃饺子是为了纪念谁?
- 【日常】我的扬马最后一小时
- 雅特力AT32F403A串口UART8只能接收不能发送问题可能是因为UART8发送信号与XMC字节选信号冲突
- 鼓式瞬态成型机 XLN Audio DS-10 Drum Shaper 1.0.5 WiN-MAC
- node.js中exports与module.exports的区别