Comparable 接口学习:对对象List进行比较和排序(正序和逆序)
Comparable 接口只有一个 int compareTo(T o) 方法
1、int compareTo(T o) 方法
- 方法说明:
- 比较此对象和规定的对象,如果此对象大于,等于,小于规定对象,则分别返回负整数,0和正整数。
- 代码说明: (T)a.compareTo(T b)
- a>b:返回一个正整数
- a=b:返回0。
- a<b:返回一个负整数
2、通俗点来说:
- compareTo(T o) 方法实际定义了一套比较规则,规则就是方法体。
- 比较结果就是方法返回结果。
- 返回正整数表示当前对象大于比较的对象;
- 返回负整数表示当前对象小于比较的对象;
- 返回0表示当前对象等于比较的对象;
- 所有要比较的对象都可以继承 Comparable 接口并实现 compareTo(T o) 方法来制定自己的比较规则。
3、根据比较规则和比较结果进行排序(正序、逆序)
- 排序,要么从大到小,要么从小到大。没有其他了。
- 而大小的判断,则是通过compareTo(T o) 方法的返回来判断的。
- 所以,排序也有了。
4、上面都是理论说明,具体,怎么应用到对象上呢?
- 参考:使用 Collections.sort 对 List 进行排序 - 赵小样的博客 - CSDN 博客 https://blog.csdn.net/zhaozhiwen6140/article/details/52120441
- 上面教程说的很详细了。
5、我的实现
public class DataStatisticVo1 implements Comparable <DataStatisticVo1> {
//日汇总页面使用
private String businessCode;
private String created;
private String vendorId;
private String denomination;
public String getBusinessCode() {
return businessCode;
}
public void setBusinessCode(String businessCode) {
this.businessCode = businessCode;
}
public String getCreated() {
return created;
}
public void setCreated(String created) {
this.created = created;
}
public String getVendorId() {
return vendorId;
}
public void setVendorId(String vendorId) {
this.vendorId = vendorId;
}
public String getDenomination() {
return denomination;
}
public void setDenomination(String denomination) {
this.denomination = denomination;
}
@Override
public int compareTo(DataStatisticVo1 another) {
//正常的比较,大于时返回1表示正序;大于时返回0表示逆序
//创建时间逆序
if(null!=this.getCreated()&&null!=another.getCreated()){
//比较结果>0,表示this比another大,但为例实现逆序,我们需要定义返回-1,表示this比another小
if(this.getCreated().compareTo(another.getCreated())>0){
return -1;
}
if (this.getCreated().compareTo(another.getCreated())<0){
return 1;
}
}
if(null!=this.getVendorId()&&null!=another.getVendorId()){
//商家ID正序
if(Long.parseLong(this.getVendorId())>Long.parseLong(another.getVendorId())){
return 1;
}
if(Long.parseLong(this.getVendorId())<Long.parseLong(another.getVendorId())){
return -1;
}
}
if(null!=this.getBusinessCode()&&null!=another.getBusinessCode()){
//业务类型正序
if(this.getBusinessCode().compareTo(another.getBusinessCode())>0){
return 1;
}
if (this.getBusinessCode().compareTo(another.getBusinessCode())<0){
return -1;
}
}
if(null!=this.getDenomination()&&null!=another.getDenomination()){
//面额单位逆序
String unitThis = this.getDenomination().substring(this.getDenomination().length()-1,this.getDenomination().length());
String unitAnother = another.getDenomination().substring(another.getDenomination().length()-1,another.getDenomination().length());
if(unitThis.compareTo(unitAnother)>0){
return -1;
}
if (unitThis.compareTo(unitAnother)<0){
return 1;
}
if(unitThis.equals(unitAnother)){
//面额数值逆序
if(Long.parseLong(this.getDenomination().substring(0,(this.getDenomination().length()-1)))>Long.parseLong(another.getDenomination().substring(0,(another.getDenomination().length()-1)))){
return -1;
}
if(Long.parseLong(this.getDenomination().substring(0,(this.getDenomination().length()-1)))<Long.parseLong(another.getDenomination().substring(0,(another.getDenomination().length()-1)))){
return 1;
}
}
}
//0表示相等
return 0;
}
}
Comparable 接口学习:对对象List进行比较和排序(正序和逆序)的更多相关文章
- 利用Comparable接口实现对对象数组的排序
Arrays 类中的sort方法承诺可以对对象数组进行排序,但是需要对象所属的类实现Comparable接口 任何实现Comparable接口的对象都需要实现该方法 并且在Java SE 5.0之前该 ...
- Java—集合框架 Collections.sort()、Comparable接口和Comparator接口
Collentions工具类--java.util.Collections Collentions是Java集合框架中,用来操作集合对象的工具类,也是Java集合框架的成员,与List.Map和Set ...
- Comparable接口的使用
功能: Comparable接口可用于对象的排序或者对象的分组 介绍: Comparable接口强行对实现它的类的每个实例进行自然排序,该接口的唯一方法compareTo方法被称为自然比较方法 方法: ...
- Java的Comparable接口
Comparable接口提供比较对象大小功能,实现了此接口的类的对象比较大小将通过接口提供的compareTo方法. 此方法的返回int类型,分三种情况. 返回正数,当前对象大于目标对象 返回负数,当 ...
- Java中实现对象的比较:Comparable接口和Comparator接口
在实际应用中,我们往往有需要比较两个自定义对象大小的地方.而这些自定义对象的比较,就不像简单的整型数据那么简单,它们往往包含有许多的属性,我们一般都是根据这些属性对自定义对象进行比较的.所以Java中 ...
- 通过实现Comparable接口结合TreeSet来对对象自动排序
经过会遇到这样的情况,对于某个对象数组或者链表要按照一定的规则进行排序,那么我们该怎么做呢? 如遇到这样的需求: 1.需求1 对于学生对象按照年龄进行排序,年龄小的排在前面. 单单看到这样的需求,实现 ...
- Java:实现对象的比较 comparable接口和comparator接口
在实际应用中,我们往往有需要比较两个自定义对象大小的地方.而这些自定义对象的比较,就不像简单的整型数据那么简单,它们往往包含有许多的属性,我们一般都是根据这些属性对自定义对象进行比较的.所以Java中 ...
- 【LeetCode】two num 利用comparable接口 对对象进行排序
题目two num 题意:给定一个整数数组和一个目标值.要求在数组中找到两个数.使得它们的和相加等于目标值.而且返回两个数的下标 思路:1.假设使用暴力,时间复杂度为O(n^2) 2.能够先将全部数进 ...
- Effective Java 第三版——14.考虑实现Comparable接口
Tips <Effective Java, Third Edition>一书英文版已经出版,这本书的第二版想必很多人都读过,号称Java四大名著之一,不过第二版2009年出版,到现在已经将 ...
随机推荐
- 发现sqlite
1.前言 本文使用"发现"二字,是表示我作为一个用过mysql oracle hive以及各种nosql数据库的男人,竟然发现有一个如此常识的数据库我竟然不知道. 在配置airfl ...
- 003_STM32程序移植之_W25Q64
1. 测试环境:STM32C8T6 2. 测试模块:W25Q64FLASH模块 3. 测试接口: 1. W25Q64FLASH模块接口: VCC3.3--------------------VCC3. ...
- 030_根据 md5 校验码,检测文件是否被修改
#!/bin/bash#本示例脚本检测的是/etc 目录下所有的 conf 结尾的文件,根据实际情况,可以修改为其他目录或文件#本脚本在目标数据没有被修改时执行一次,当怀疑数据被人篡改,再执行一次#将 ...
- 024_统计/var/log 有多少个文件,并显示这些文件名
#!/bin/bash#使用 ls 递归显示所有,再判断是否为文件,如果是文件则计数器加 1cd /var/logsum=0for i in `ls -r *`do if [ -f $i ]; ...
- web文件夹上传
需求:项目要支持大文件上传功能,经过讨论,初步将文件上传大小控制在500M内,因此自己需要在项目中进行文件上传部分的调整和配置,自己将大小都以501M来进行限制. 第一步: 前端修改 由于项目使用的是 ...
- python print import使用
>>> print("aaaa","bbbb")aaaa bbbb>>> print(1, 2, 3)1 2 3 为模块提供 ...
- [Luogu] 遥远的国度
https://www.luogu.org/problemnew/show/P3979 3种情况 x=root,很显然此时应当查询整棵树 lca(root,x)!=x ,此时直接查询x的子树即可,与换 ...
- numpy基础一
常用,常忘 1.随机矩阵 np.random.rand(4,3) array([[ 0.06679473, 0.71073515, 0.5694172 ], [ 0.95018143, 0.60161 ...
- 2019牛客暑期多校训练营(第六场)E 构造、原图是补图的同构图
https://ac.nowcoder.com/acm/contest/886#question 题意 问是否存在某个n个点的无向图G是其补图H的同构图,若存在输出G的邻接矩阵以及H关于G的映射. ...
- cesium billboard跨域问题1
群里小伙伴问道使用billboard加载图片时出现跨域问题,一般认为在服务器端设置 Access-Control-Allow-Origin: * 例如用tomcat发布图片服务,可以这样设置:http ...