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年出版,到现在已经将 ...
随机推荐
- scrollReveal(页面缓入效果插件)
scrollReveal(页面缓入效果插件)实现页面滚动时动画加载元素效果 前面我去了解了元素距页面视图距离,想实现页面滚动是动画加载元素(https://www.cnblogs.com/chengh ...
- Java8-Lambda-No.02
public class Lambda2 { @FunctionalInterface public static interface Converter<F, T> { T conver ...
- python--第四天练习题
#1.写函数,利用递归获取斐波那契数列中的第 10 个数,并将该值返回给调用者. def rec(a,b,dep=1): c = a + b if dep == 10: return c return ...
- sigprocmask , sigpending 和 sigsuspend函数
转自 http://blog.csdn.net/elbort/article/details/7594772 sigprocmask函数:功能描述:设定对信号屏蔽集内的信号的处理方式(阻塞或不阻塞). ...
- ECMAScript 提案阶段
stage0 strawman任何讨论.想法.改变或者还没加到提案的特性都在这个阶段.只有TC39成员可以提交. stage1 proposal (1)产出一个正式的提案. (2)发现潜在的问题,例如 ...
- Python3读写JSON文件
JSON简介 JSON(JavaScript Object Notation)即JavaScript对象表示法,一种轻量级,通用的文本数据格式. JSON语法支持对象(Object),数组(Array ...
- codeforces#1234F. Yet Another Substring Reverse(子集dp)
题目链接: https://codeforces.com/contest/1234/problem/F 题意: 给出一个只包含前20个小写字母的字符串,一次操作可以让一段字符颠倒顺序 最多一次这样的操 ...
- IDEA版本控制工具VCS中使用Git,以及快捷键总结(不使用命令)
场景介绍: 工作中多人使用版本控制软件协作开发,常见的应用场景归纳如下: 假设小组中有两个人,组长小张,组员小袁 场景一:小张创建项目并提交到远程Git仓库 场景二:小袁从远程Git仓库上获取项目源码 ...
- 调用subprocess 使用logging打印日志
#!/usr/bin/env python # -*- coding:utf-8 -*- # Author:Henry 17607168727@163.com import sys import lo ...
- [Oracle]关于回滚段的一些转贴摘录
ORACLE 回滚段 回滚段概述 回滚段用于存放数据修改之前的值(包括数据修改之前的位置和值).回滚段的头部包含正在使用的该回滚段事务的信息.一个事务只能使用一个回滚段来存放它的回滚信息,而一个回滚段 ...