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年出版,到现在已经将 ...
随机推荐
- MySQL 源码编译安装脚本
cat mysql_init.shmysql_init.sh mysql_init.sh.20190401 mysql_init.sh.back20171030 ...
- ckeditor粘贴word文档图片的思路
由于工作需要必须将word文档内容粘贴到编辑器中使用 但发现word中的图片粘贴后变成了file:///xxxx.jpg这种内容,如果上传到服务器后其他人也访问不了,网上找了很多编辑器发现没有一个能直 ...
- vue中mixin的理解与用法
vue中提供了一种混合机制--mixins,用来更高效的实现组件内容的复用.最开始我一度认为这个和组件好像没啥区别..后来发现错了.下面我们来看看mixins和普通情况下引入组件有什么区别? 组件在引 ...
- 报错 One or more constraints have not been satisfied.
常出现在导入已有标签时. 需要在<build/><plugins/>里面追加标签 <plugin> <groupId>org.apache.maven. ...
- 十七、程序包管理之yum和编译安装
YUM Redhat二次发行版 Yellow Dog Linux,上使用的yum(Yellowdog Update Modifier),由yellow dog 研发 yum命令的工作原理 1.接收用户 ...
- Echarts案例-折线图
一:先在官网下载 https://www.echartsjs.com/zh/download.html 然后再建立工程,导入这两个包: 写代码: <!DOCTYPE html> <h ...
- Linux设备驱动程序 之 tasklet
多数情况下,为了控制一个寻常的硬件设备,tasklet机制都是实现自己下半部的最佳选择:tasklet可以动态创建,使用方便,执行起来还算快: 声明tasklet tasklet既可以静态的创建,也可 ...
- [转发]Android视频技术探索之旅:美团外卖商家端的实践
美团技术团队 2019-09-12 20:02:11 背景 2013年美团外卖成立,至今一直迅猛发展.随着外卖业务量级与日俱增,单一的文字和图片已无法满足商家的需求,商家迫切需要更丰富的商品描述手段吸 ...
- 第11组 Beta冲刺(3/5)
第11组 Beta冲刺(3/5) 队名 不知道叫什么团队 组长博客 https://www.cnblogs.com/xxylac/p/12006665.html 作业博客 https://edu. ...
- CodeWar打怪升级-Python篇
1. The goal of this exercise is to convert a string to a new string where each character in the new ...