关于比较,大家平日了解较多的可能都是基本类型相关的,比如比较个数字啦,首字母排序啦之类的;但大部分时候接收的数据都是被封装成对象的,要对对象中的某个数据进行比较并排序时,就不能随随便便调个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比较器相关推荐

  1. Java核心API -- 7(Iterator迭代器、Comparable、Comparator比较器)

    1. Iterator迭代器 所有Collection的实现类都实现了iterator方法,该方法返回一个Iterator接口类型的对象,用于实现对集合元素迭代的便利.在java.util包下. 1) ...

  2. java8 lambda 排序算法,Java8中排序算法比较器的三种写法(使用lambda表达式实现Comparator比较器)...

    在涉及到数组, 集合等这些地方经常会需要用到排序算法, 在Java中的Collections类中有sort方法, 除了需要传入一个Comparator比较器, 或者需要排序的类实现了Comparabl ...

  3. 进阶08 Collections实现类、Comparator比较器接口

    Collections 常用功能 java.utils.Collections是集合工具类,用来对集合进行操作.部分方法如下: public static <T> boolean addA ...

  4. 【PTA】匿名内部类:实现Comparator比较器

    Student类定义如下.利用Arrays工具类中的sort方法对Student数组进行排序.由于Student类没有实现Comparable接口,因此sort方法需要传入一个Comparator比较 ...

  5. (比较器)Comparator比较器

    Comparator比较器 Comparator属于一种挽救的比较器支持,其主要目的是解决一些没有使用Comparable排序的类的对象的排序操作. 范例:程序项目已经开发完成了,并且由于先期的设计并 ...

  6. Java中的集合---------Collections 类---集合的工具类 Comparator比较器

    Collections 2.1 常用功能 java.utils.Collections是集合工具类,用来对集合进行操作.部分方法如下: public static <T> boolean ...

  7. 【IC5】运算放大器的驱动能力,Comparator比较器电路,运算放大器和功率放大器的区别,

    1,运放直接驱动负载要加一级驱动,什么是一级驱动 你所说的一级驱动是具有一定的电流驱动能力的电路,为什么需要驱动电流能力呢?因为很多运放是设计用来驱动容性负载的,而容性负载不需要有恒定的电流流过,但是 ...

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

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

  9. 秒杀Java中的Comparator比较器

    教你使用Java中的Comparator比较器 一.知识点简述: 自定义比较器: Comparator:比较器 Comparator是一个接口,无法直接创建对象,需要实现类去创建 创建Comparat ...

  10. Java 的Comparator比较器用法

    1.定义:Comparator是外部比较器,用于比较来对象与对象之间的,两个对象进行比较,多用于集合排序,而Comparable可以认为是一个内比较器,根据对象某一属性进行排序的 2.使用方法 1)定 ...

最新文章

  1. html 导航右侧弹出层,CSS导航栏及弹窗示例代码
  2. 计算机原理期中考试答案,微机原理与接口技术期中考试题(带答案)
  3. 文献学习(part44)--Aberrance suppresse dspatio-temporal correlation filters for visual object tracking
  4. bootstrap table相关操作
  5. python输入变量输出常量_Python输入input、输出print
  6. Spark源码系列(一)spark-submit提交作业过程
  7. OpenCV学习笔记(九) 重映射、仿射变换
  8. vertical-align属性
  9. VS2017内使用Coin3d第三方库的配置方法(含库与案例)
  10. 电脑记事本在哪个文件夹
  11. ROS kinetic自定义路径规划算法
  12. python 移动平均函数_python – NumPy版本的“指数加权移动平均线...
  13. 软考知识点笔记之----项目范围说明书
  14. BOTTON控件介绍及程序基本框架与皮肤自定义
  15. 一天接收了131份前端面试简历......(面试总结)
  16. linux mysql 僵尸进程_Linux 系统中僵尸进程
  17. 【小学信息技术教资面试】教案模板
  18. 如何查看eclipse是32位还是64位
  19. CAJ文件报错提示“file does not exist”之类如何解决
  20. windows 可以禁用的服务盘点

热门文章

  1. NoteBurner Netflix Video Downloader帮你实现下载电影和电视节目并离线观看
  2. Android拍照相册相关的图片获取与剪切工具类
  3. 删除本地分支 并重新拉取远程分支复制到本地
  4. 变分自编码器VAE的数学原理
  5. linux系统的电脑品牌有什么,主流Linux系统品牌推介
  6. 王者荣耀服务器维护6月27,王者荣耀体验服6月27日更新公告 服务器异常数据回档...
  7. Php+mysql社区交流系统(毕业论文+封面目录+系统+说明书)
  8. 20.CSS3 立体卡片展示特效
  9. 无名管道PIPE,进行父子双进程的“双向通信”
  10. 人像后期的系统性后期处理