Comparator比较器
关于比较,大家平日了解较多的可能都是基本类型相关的,比如比较个数字啦,首字母排序啦之类的;但大部分时候接收的数据都是被封装成对象的,要对对象中的某个数据进行比较并排序时,就不能随随便便调个Sort方法了。本文主要介绍Comparator接口的使用方法。
1.概念
首先要明确,Comparator是一个接口类,我们需要实现该类并重写其中的compare方法,来自定义比较逻辑。那么这个逻辑应该如何编写,看看下面这段。
//在重写compare的比较逻辑时,只需要记住一个原则:
//返回-1就是不交换,返回1就是需要交换//那么看下面的代码@Override
public int compare(Integer o1, Integer o2) {return o1 < o2 ? 1 : -1;
}
//当o1<o2时返回1,说明小数需要交换到后面去,那么最终结果应该呈现为降序@Override
public int compare(Integer o1, Integer o2) {return o1 > o2 ? -1 : 1;
}
//再看这种情况,当o1>o2时返回-1,不需要交换,说明大数就应放在前面,那么最终结果应该仍然呈现为降序
在明确了基本的使用逻辑后,就可以构建一个比较器,配合Collections.sort()或Arrays.sort()来对目标数组/列表进行操作了。下面就是一个最简单的升序排列逻辑。
Collections.sort(stuList, new Comparator<Integer>() {@Overridepublic int compare(Integer o1, Integer o2) {return o1 < o2 ? -1 : 1;}
});
//Arrays.sort()同理
2.应用
那么回到一开始说的,我们需要排序的是一堆对象,比如说一堆学生,要根据他们的学号升序排列,运用Comparator也可以很简单实现。
//根据学号升序排序
Collections.sort(stuList, new Comparator<EmStudent>() {@Overridepublic int compare(EmStudent o1, EmStudent o2) {Integer stuNumber1 = Integer.parseInt(o1.getStuNumber());Integer stuNumber2 = Integer.parseInt(o2.getStuNumber());return stuNumber1 < stuNumber2 ? -1 : 1;}
});
但如果我们要按学生姓名升序排列呢?
可能大伙第一反应还是简单的调用Sort方法,但这里是China,我们的名字不是Jack/Rose/Lily,而是张三/李四/王五,那么该如何比较呢?
这个时候就要用到Comparator的一个实现类:Collator类,这个类主要用于String类型的比较,其中就包含了中文。
//先使用静态工厂方法来获取Collator的实例对象,指定语言为中文
Comparator<Object> comparator = Collator.getInstance(Locale.CHINA);//再将该比较器对象放入sort方法中
Collections.sort(stuList, new Comparator<EmStudent>() {@Overridepublic int compare(EmStudent o1, EmStudent o2) {return comparator.compare(o1.getStuName(), o2.getStuName());}
});
//当前排序模式为升序,如需要降序排序,则将o2放在前,o1放在后
Comparator比较器相关推荐
- Java核心API -- 7(Iterator迭代器、Comparable、Comparator比较器)
1. Iterator迭代器 所有Collection的实现类都实现了iterator方法,该方法返回一个Iterator接口类型的对象,用于实现对集合元素迭代的便利.在java.util包下. 1) ...
- java8 lambda 排序算法,Java8中排序算法比较器的三种写法(使用lambda表达式实现Comparator比较器)...
在涉及到数组, 集合等这些地方经常会需要用到排序算法, 在Java中的Collections类中有sort方法, 除了需要传入一个Comparator比较器, 或者需要排序的类实现了Comparabl ...
- 进阶08 Collections实现类、Comparator比较器接口
Collections 常用功能 java.utils.Collections是集合工具类,用来对集合进行操作.部分方法如下: public static <T> boolean addA ...
- 【PTA】匿名内部类:实现Comparator比较器
Student类定义如下.利用Arrays工具类中的sort方法对Student数组进行排序.由于Student类没有实现Comparable接口,因此sort方法需要传入一个Comparator比较 ...
- (比较器)Comparator比较器
Comparator比较器 Comparator属于一种挽救的比较器支持,其主要目的是解决一些没有使用Comparable排序的类的对象的排序操作. 范例:程序项目已经开发完成了,并且由于先期的设计并 ...
- Java中的集合---------Collections 类---集合的工具类 Comparator比较器
Collections 2.1 常用功能 java.utils.Collections是集合工具类,用来对集合进行操作.部分方法如下: public static <T> boolean ...
- 【IC5】运算放大器的驱动能力,Comparator比较器电路,运算放大器和功率放大器的区别,
1,运放直接驱动负载要加一级驱动,什么是一级驱动 你所说的一级驱动是具有一定的电流驱动能力的电路,为什么需要驱动电流能力呢?因为很多运放是设计用来驱动容性负载的,而容性负载不需要有恒定的电流流过,但是 ...
- 【Java 8 新特性】Java Comparator | 比较器
Java Comparator | 比较器 比较器功能方法:compare(T o1, T o2) 1. 使用 Lambda 表达式定义 compare 2. 自定义 compare 实现比较器 比较 ...
- 秒杀Java中的Comparator比较器
教你使用Java中的Comparator比较器 一.知识点简述: 自定义比较器: Comparator:比较器 Comparator是一个接口,无法直接创建对象,需要实现类去创建 创建Comparat ...
- Java 的Comparator比较器用法
1.定义:Comparator是外部比较器,用于比较来对象与对象之间的,两个对象进行比较,多用于集合排序,而Comparable可以认为是一个内比较器,根据对象某一属性进行排序的 2.使用方法 1)定 ...
最新文章
- html 导航右侧弹出层,CSS导航栏及弹窗示例代码
- 计算机原理期中考试答案,微机原理与接口技术期中考试题(带答案)
- 文献学习(part44)--Aberrance suppresse dspatio-temporal correlation filters for visual object tracking
- bootstrap table相关操作
- python输入变量输出常量_Python输入input、输出print
- Spark源码系列(一)spark-submit提交作业过程
- OpenCV学习笔记(九) 重映射、仿射变换
- vertical-align属性
- VS2017内使用Coin3d第三方库的配置方法(含库与案例)
- 电脑记事本在哪个文件夹
- ROS kinetic自定义路径规划算法
- python 移动平均函数_python – NumPy版本的“指数加权移动平均线...
- 软考知识点笔记之----项目范围说明书
- BOTTON控件介绍及程序基本框架与皮肤自定义
- 一天接收了131份前端面试简历......(面试总结)
- linux mysql 僵尸进程_Linux 系统中僵尸进程
- 【小学信息技术教资面试】教案模板
- 如何查看eclipse是32位还是64位
- CAJ文件报错提示“file does not exist”之类如何解决
- windows 可以禁用的服务盘点
热门文章
- NoteBurner Netflix Video Downloader帮你实现下载电影和电视节目并离线观看
- Android拍照相册相关的图片获取与剪切工具类
- 删除本地分支 并重新拉取远程分支复制到本地
- 变分自编码器VAE的数学原理
- linux系统的电脑品牌有什么,主流Linux系统品牌推介
- 王者荣耀服务器维护6月27,王者荣耀体验服6月27日更新公告 服务器异常数据回档...
- Php+mysql社区交流系统(毕业论文+封面目录+系统+说明书)
- 20.CSS3 立体卡片展示特效
- 无名管道PIPE,进行父子双进程的“双向通信”
- 人像后期的系统性后期处理