Java中Comparator的使用
在某些特殊情况,我们需要对一个对象数组或集合依照对应的属性排序;此时,我们就可以用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的使用的更多相关文章
- java中Comparator的用法 -- 实现集合和数组排序
在java中,如果要对集合对象或数组对象进行排序,需要实现Comparator接口以达到我们想要的目标. 接下来我们模拟下在集合对象中对日期属性进行排序 一.实体类Step package com.l ...
- Java 中Comparator 的使用,实现集合排序
目标:实现对Person 对象的年龄,从小到大排序 1.实现排序 package com.app; import java.util.ArrayList; import java.util.Colle ...
- java中Comparator比较器顺序问题,源码分析
提示: 分析过程是个人的一些理解,如有不对的地方,还请大家见谅,指出错误,共同学习. 源码分析过程中由于我写的注释比较啰嗦.比较多,导致文中源代码不清晰,还请一遍参照源代码,一遍参照本文进行阅读. 原 ...
- Java中 Comparator接口 与Comparable 的区别
详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcyt159 comparator接口与Comparable接口的区别 1. Com ...
- [转] Java中Comparator进行对象排序
[From] https://blog.51cto.com/thinklili/2063244 Java在8后引入了lambda表达式和流,使得排序方法有了变化 class User { int id ...
- Java中Comparator接口和Comparable接口的使用
普通情况下在实现对对象元素的数组或集合进行排序的时候会用到Comparator和Comparable接口,通过在元素所在的类中实现这两个接口中的一个.然后对数组或集合调用Arrays.sort或者Co ...
- Java中Lambda表达式的使用
简介(译者注:虽然看着很先进,其实Lambda表达式的本质只是一个"语法糖",由编译器推断并帮你转换包装为常规的代码,因此你可以使用更少的代码来实现同样的功能.本人建议不要乱用,因 ...
- Java中Lambda表达式的使用(转)
https://www.cnblogs.com/franson-2016/p/5593080.html 简介(译者注:虽然看着很先进,其实Lambda表达式的本质只是一个"语法糖" ...
- Java中Comparable和Comparator接口区别分析
Java中Comparable和Comparator接口区别分析 来源:码农网 | 时间:2015-03-16 10:25:20 | 阅读数:8902 [导读] 本文要来详细分析一下Java中Comp ...
随机推荐
- dfs+枚举,flip游戏的拓展POJ2965
POJ 2965 The Pilots Brothers' refrigerator Description The game “The Pilots Brothers: fo ...
- svn的安装和备份
svn的安装: yum install subversion -y mkdir /svn 创建用来存放svn版本库的目录 svnadmin create /svn/first 创建一个svn的版本库 ...
- mybatis实现有则更新无则插入
<insert id="insertUser" useGeneratedKeys="true" keyProperty="id" ke ...
- Booth算法: 补码一位乘法公式推导与解析
以下讲解内容出自<计算机组成原理(第三版)>(清华大学出版社) 大二学生一只,我的计组老师比较划水,不讲公式推导,所以最近自己研究了下Booth算法的公式推导,希望能让同样在研究Booth ...
- 忘记SYS密码
进入控制台录入 sqlplus /nolog; connect / as sysdba alter user sys identified by ; alter user system ident ...
- acm数论之旅(转载) -- 快速幂
0和1都不是素数,也不是合数. a的b次方怎么求 pow(a, b)是数学头文件math.h里面有的函数 可是它返回值是double类型,数据有精度误差 那就自己写for循环咯 LL pow(LL a ...
- Windows 查看并关闭占用指定端口的程序
windows关闭端口的小工具: 链接:https://pan.baidu.com/s/1ZGL4cdSluy0lbi3tDERUvA 提取码:spxy 查看指定端口的使用情况 netstat -an ...
- Spring Boot 使用 CXF 调用 WebService 服务
上一张我们讲到 Spring Boot 开发 WebService 服务,本章研究基于 CXF 调用 WebService.另外本来想写一篇 xfire 作为 client 端来调用 webservi ...
- HYSBZ-2038小Z的袜子
作为一个生活散漫的人,小Z每天早上都要耗费很久从一堆五颜六色的袜子中找出一双来穿.终于有一天,小Z再也无法忍受这恼人的找袜子过程,于是他决定听天由命-- 具体来说,小Z把这N只袜子从1到N编号,然后从 ...
- 吴裕雄 Bootstrap 前端框架开发——简介
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...