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 ...
随机推荐
- Go类型断言
package main import ( "fmt" ) type Point struct { x int y int } func main() { var a interf ...
- js中ES6的Set的基本用法
ES6 提供了新的数据结构 Set.它类似于数组,但是成员的值都是唯一的,没有重复的值. const s = new Set(); [2,3,5,4,5,2,2].forEach(x => s. ...
- 杨蓉庆201771010135《面向对象程序设计(java)》第一周学习总结
第一部分:课程准备部分 填写课程学习 平台注册账号, 平台名称 注册账号 博客园:www.cnblogs.com 艾特大家 程序设计评测:https://pintia.cn/ 艾特你 代码托管平台:h ...
- Java 9 New Features
Java 9 概述 1. jdk 9 的发布.经过 4 次跳票,历经曲折的 java 9 终于终于在 2017 年 9 月 21 日发布. 2. Java 9 中哪些不得不说的新特性?java 9 提 ...
- 创建Ajax兼容
var request = new XMLHttpRequest(); IE7以下: var request = new ActiveXObject("Microsoft.XMLHTTP&q ...
- CSS样式的引入&区别&权重&CSS层叠性&CSS样式的来源
CSS样式的引入: 内部样式: 内部样式:写在当前页面style标签中的样式 内联样式:写在style属性中的样式 外部样式: link标签引入的CSS文件 @import引入的CSS文件,需要写在c ...
- ES6-let声明变量
在es6中除了var还可以用let申明变量,并且建议使用let而不要再使用var,两者有以下区别: 1.let不能重复声明变量 var name = 'tom'; var name = 'jack'; ...
- java模板字符串功能的简单实现
package com.Interface.util; import lombok.extern.slf4j.Slf4j; /** * 测试类 * * @author 华文 * @date 2019年 ...
- 安装pytorch
安装cpu版本的 conda install pytorch-cpu torchvision-cpu -c pytorch 安装gpu版本的 conda install pytorch torchvi ...
- iOS ViewController 中代码书写规范
示例: // // CommonViewController.m // ZTBCamera // // Created by ZachRobin on 2017/8/3. // Copyright © ...