在某些特殊情况,我们需要对一个对象数组或集合依照对应的属性排序;此时,我们就可以用Comparator接口处理。

上代码

TestComparaTo 类
 package com.test.interfacetest;

 public class TestComparaTo implements Comparable<TestComparaTo>{
private int id;
private String name; public int getId() {
return id;
} public void setId(int id) {
this.id = id;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} @Override
public int compareTo(TestComparaTo o) {
return Integer.compare(id, o.getId());
} }

MainClass类

 import java.util.Arrays;
import java.util.Collections;
import java.util.List; import com.test.interfacetest.TestComparaTo; public class MainClass { public static void main(String[] args) {
TestComparaTo testComparaTo = new TestComparaTo();
testComparaTo.setId(21);
testComparaTo.setName("钻石王老五"); TestComparaTo testComparaTo1 = new TestComparaTo();
testComparaTo1.setId(15);
testComparaTo1.setName("岛市老八"); TestComparaTo testComparaTo2 = new TestComparaTo();
testComparaTo2.setId(19);
testComparaTo2.setName("芜湖大司马"); TestComparaTo[] s = {testComparaTo,testComparaTo1,testComparaTo2};
List<TestComparaTo> asList = Arrays.asList(s); System.out.println("排序前集合内容:");
for(TestComparaTo obj : asList) {
System.out.println(obj.getName()+"id为:"+obj.getId());
} System.out.println("排序前数组内容:");
for(TestComparaTo obj : s) {
System.out.println(obj.getName()+"id为:"+obj.getId());
} Arrays.sort(s);
Collections.sort(asList); System.out.println("排序后集合内容:");
for(TestComparaTo obj : asList) {
System.out.println(obj.getName()+"id为:"+obj.getId());
}
System.out.println("排序后数组内容:");
for(TestComparaTo obj : s) {
System.out.println(obj.getName()+"id为:"+obj.getId());
} } }

总结就是:实现comparable接口的comparaTo方法,然后数组用Array的sort方法排序,集合用collection的sort方法排序。

在Java8后,可以运用lambda表达式使得Comparator使用起来更简单

例如下面四种方法

 //以下第一个参数a、b、c、d是TestComparaTo类的实例化对象的数组,对该数组排序

 //根据TestComparaTo类的name属性排序
Arrays.sort(a,Comparator.comparing(TestComparaTo::getName)); //如果name相同则根据id排序
Arrays.sort(b,Comparator.comparing(TestComparaTo::getName).thenComparing(TestComparaTo::getId)); //根据name长度排序
Arrays.sort(c,Comparator.comparing(TestComparaTo::getName,(a,t)->Integer.compare(a.length(), t.length()))); //根据name长度排序 显然这个比上一个更简单
Arrays.sort(d,Comparator.comparingInt(a -> a.getName().length()));

Java中Comparator的使用的更多相关文章

  1. java中Comparator的用法 -- 实现集合和数组排序

    在java中,如果要对集合对象或数组对象进行排序,需要实现Comparator接口以达到我们想要的目标. 接下来我们模拟下在集合对象中对日期属性进行排序 一.实体类Step package com.l ...

  2. Java 中Comparator 的使用,实现集合排序

    目标:实现对Person 对象的年龄,从小到大排序 1.实现排序 package com.app; import java.util.ArrayList; import java.util.Colle ...

  3. java中Comparator比较器顺序问题,源码分析

    提示: 分析过程是个人的一些理解,如有不对的地方,还请大家见谅,指出错误,共同学习. 源码分析过程中由于我写的注释比较啰嗦.比较多,导致文中源代码不清晰,还请一遍参照源代码,一遍参照本文进行阅读. 原 ...

  4. Java中 Comparator接口 与Comparable 的区别

    详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcyt159 comparator接口与Comparable接口的区别 1. Com ...

  5. [转] Java中Comparator进行对象排序

    [From] https://blog.51cto.com/thinklili/2063244 Java在8后引入了lambda表达式和流,使得排序方法有了变化 class User { int id ...

  6. Java中Comparator接口和Comparable接口的使用

    普通情况下在实现对对象元素的数组或集合进行排序的时候会用到Comparator和Comparable接口,通过在元素所在的类中实现这两个接口中的一个.然后对数组或集合调用Arrays.sort或者Co ...

  7. Java中Lambda表达式的使用

    简介(译者注:虽然看着很先进,其实Lambda表达式的本质只是一个"语法糖",由编译器推断并帮你转换包装为常规的代码,因此你可以使用更少的代码来实现同样的功能.本人建议不要乱用,因 ...

  8. Java中Lambda表达式的使用(转)

    https://www.cnblogs.com/franson-2016/p/5593080.html 简介(译者注:虽然看着很先进,其实Lambda表达式的本质只是一个"语法糖" ...

  9. Java中Comparable和Comparator接口区别分析

    Java中Comparable和Comparator接口区别分析 来源:码农网 | 时间:2015-03-16 10:25:20 | 阅读数:8902 [导读] 本文要来详细分析一下Java中Comp ...

随机推荐

  1. C语言:计算并输出S=1+(1+2^0.5)+(1+2^0.5+3^0.5)...+(1+2^0.5+3^0.5+...+n^0.5)

    //计算并输出S=1+(1+2^0.5)+(1+2^0.5+3^0.5)...+(1+2^0.5+3^0.5+...+n^0.5) #include<math.h> #include< ...

  2. 图解 Kafka 水印备份机制

    高可用是很多分布式系统中必备的特征之一,Kafka 日志的高可用是通过基于 leader-follower 的多副本同步实现的,每个分区下有多个副本,其中只有一个是 leader 副本,提供发送和消费 ...

  3. EasyUI中使用自定义的icon图标

    我们在web开发中为了界面的更加漂亮,我们可能会使用EasyUI框架来帮我们实现一些好看的效果,那么在框架里面提供了很多的样式和图标,但是有时候自带的图标已经满足不了我们啦,这时候我们应该往里面加入我 ...

  4. BeautifulReport底层框架的解析以及html报告页面元素的更改

    利用BeautifulReport 模块生成html报告 import BeautifulReport as br#引入包,之后设置一下别名 br = br.BeautifulReport(test_ ...

  5. ThinkPHP3.2.2的函数扩展

    ThinkPHP的函数扩展:为了更好的在前台模板中显示变量,例如,商品分类中,分类名称之间的缩进.此时,在APP/Common/Common文件夹下(APP为新建的应用目录),新建一个php文件,如: ...

  6. 炼金术(1): 识别项目开发中的ProtoType、Demo、MVP

    软件开发是很分裂的,只有不断使用原则和规律,才能带来质量. 只要不是玩具性质的项目,项目应该可以大概划分为0-1,1-10,10-100,100-1000四个种重要阶段.其中,0-1是原型验证性的:1 ...

  7. mDNS故障排查(译)

    WLC上mDNS网关的理解及排查 第一部分:介绍 这篇文档描述了Bonjour协议在WLC上的操作,该文档旨在协助工程师理解该工作流量的原理以及提供故障排查的指导. 第二部分:需求和前提 知识需求: ...

  8. 【SSM 下载】下载文件

    111111111 /** * 导出客户数据 */ @RequestMapping("exportCustomer") public ResponseEntity<Objec ...

  9. 《Interest Rate Risk Modeling》阅读笔记——第八章:基于 LIBOR 模型用互换和利率期权进行对冲

    目录 第八章:基于 LIBOR 模型用互换和利率期权进行对冲 思维导图 推导浮息债在重置日(reset date)的价格 第八章:基于 LIBOR 模型用互换和利率期权进行对冲 思维导图 推导浮息债在 ...

  10. spring aop @after和@before之类的注解,怎么指定多个切点

    有如下两个切点: @Pointcut("execution(public * com.wyh.data.controller.DepartmentController.*(..))" ...