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年出版,到现在已经将 ...
随机推荐
- BZOJ 3925: [Zjoi2015] 地震后的幻想乡(概率DP)
这里有一篇很好很强的博客%%% YouSiki大佬的博客 多理解一会就行了- 代码 #include <bits/stdc++.h> using namespace std; typede ...
- 客户端xml
package lct.conference.common; import java.io.IOException;import java.io.PrintWriter;import java.net ...
- web开发下载文件夹
我们平时经常做的是上传文件,上传文件夹与上传文件类似,但也有一些不同之处,这次做了上传文件夹就记录下以备后用.此控件PC全平台支持包括mac,linux系统的文件上传,文章末尾将附上控件下载与教程链接 ...
- 多路IO复用模型--select, poll, epoll
select 1.select能监听的文件描述符个数受限于FD_SETSIZE,一般为1024,单纯改变进程打开的文件描述符个数并不能改变select监听文件个数 2.解决1024以下客户端时使用se ...
- [BJWC2008]王之财宝
嘟嘟嘟 如果没有限制,而且必须选\(m\)件的话,就是隔板法\(C_{n + m - 1} ^ {m - 1}\)了.现在要选至多\(m\)件,那么就相当于新增一个板儿,分出的新的盒子表示" ...
- 下载、配置全新的eclipse
1.https://www.eclipse.org/downloads/ 2.确保安装配置了JDK,打开eclipse-inst-win64.exe,让eclipse installer程序UPDAT ...
- 1626:【例 2】Hankson 的趣味题
1626:[例 2]Hankson 的趣味题题解 [题目描述] Hanks 博士是 BT(Bio-Tech,生物技术)领域的知名专家,他的儿子名叫 Hankson.现在,刚刚放学回家的 Hankson ...
- json 文件读写
#coding=utf- import json data ={","version":"0.0.0","desc":{" ...
- dosbox+masm汇编环境的安装和使用
1. 下载dosbox安装程序:DOSBox0.74-win32-installer.exe 链接:https://pan.baidu.com/s/1gXPKTT-xKb6BpjOJdhmudA 密码 ...
- redis数据结构有哪些
1.String 可以是字符串,整数或者浮点数,对整个字符串或者字符串中的一部分执行操作,对整个整数或者浮点执行自增(increment)或者自减(decrement)操作. 2.list 一个链表, ...