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 ...
随机推荐
- Codeforces Round #620 (Div. 2) E
LCA的倍增 模板: ], depth[maxn]; int dist[maxn],head[maxn]; void add(int u,int v,int dist0){ a[tot].next=h ...
- java作业 11.10
package text3; import java.io.File; import java.io.IOException; import java.nio.file.Files; public c ...
- 关于 checkbox 的一些操作
获取checkbox选中的状态 $("#checkbox").is(":checked"); 设置 checkbox 的状态 $("#checkbox ...
- P1028
一开始没看懂题,看了题解才明白的 = =.思路是,先找规律,会发现有重合部分,利用这些重合部分,写出递推公式. num = 0 时,只有 1 种组合: num = 1 时,只有 1 种组合: num ...
- Codeforces AIM Tech Round 5 (rated, Div. 1 + Div. 2)
A. Find Square time limit per test: 1 second memory limit per test: 256 megabytes input: standard in ...
- python中for循环中的循环变量
废话不多说,代码伺候: for i in range(3): print("hello") print(i) 运行结果如下: 从上面的例子可以看出,for循环里面的循环变量i作用域 ...
- python csv 数据切割定制jmeter数据
需求压测随机抽取10w数据中自定义区间的指定数量数据进行压测: jmeter csv/txt配置: 需要获取{data: [${myList}] } jmeter需要数据类型 获取展读取csv数据 ...
- 批处理执行Testng
@echo off set LIB=项目的jar路径 set CLASSPATH=%LIB%\jar\commons-beanutils-.jar;%LIB%\jar\testng.jar;%LIB% ...
- PyQt5日历控件及相关操作
1.日历控件QCalendarWidget控件import sys,mathfrom PyQt5.QtWidgets import *from PyQt5.QtGui import *from PyQ ...
- JSP页面输入框赋值换行显示问题
<input type="hidden" id="${command.yhzlId}" value="${command.yhzx },${co ...