1.几种情况说明:

/**
*    排序结果为升序
*/
public int compare(int i1,int i2){retrun i1 - i2 ;
}/**
*    排序结果为降序
*/
public int compare(int i1,int i2){retrun i2 - i1;
}/**
*    排序结果为升序
*    定义Role类中有id属性
*/
public int compareTo(Role role){retrun this.id- role.id;
}/**
*    排序结果为降序
*/
public int compareTo(Role role){retrun role.id- this.id;
}

为什么public int compare(int i1,int i2){...}中return i1 - i2则为升序,而return i2 -i1则为降序呢?

2.个人理解

首先我们得先了解这几个方法中的返回值大于0、等于0、小于0的作用是什么:

返回值小于0:升序;

返回值等于0:不做位置交换;

返回值大于0:降序;

我们一般在重写compareTo方法的时候会将小于0的情况归结为rerun -1,将大于0的情况归结为return 1;

知道上面返回值的作用后,我们可以这么理解:

/**
*    方法参数i1在i2前面,则理解成此方法定义的规则是i1 < i2
*        此时若我们要定义升序,则使此方法的返回值为小于0,则可return i1 - i2;
*        此时若我们要定义降序,则使此方法的返回值为大于0,则可return i2 - i1;
*/
public int compare(int i1,int i2){...
}/**
*    方法参数i2在i1前面,则理解成此方法定义的规则是i2 < i1
*        此时若我们要定义升序,则使此方法的返回值为小于0,则可return i2 -i1;
*        此时若我们要定义降序,则使此方法的返回值为大于0,则可return i1 - i2;
*/
public int compare(int i2,i1){...
}/**
*    方法这样定义,则理解成this.id < role.id
*        此时若我们要定义升序,则使此方法的返回值小于0,则可return this.id - role.id
*        此时若我们要定义降序,则使此方法的返回值大于0,则可return role.id - this.id
*/
public int compareTo(Role role){...
}

理解了上面方法怎么写,就定义了怎样的规则后,我们就可以理解第一部分中升序、降序是怎么定义的。

3.测试代码

@NoArgsConstructor
@AllArgsConstructor
@Data
@Builder
@Accessors(chain = true)
public class Role {private Long id;private Long insertTime;private Long updateTime;private String roleName;public static void main(String[] args) {Role build1 = Role.builder().id(10L).build();Role build2 = Role.builder().id(15L).build();Role build3 = Role.builder().id(5L).build();TreeSet<Role> roles = new TreeSet<Role>(new Comparator<Role>() {@Overridepublic int compare(Role o1, Role o2) {Integer i1 = Integer.parseInt(String.valueOf(o1.id));Integer i2 = Integer.parseInt(String.valueOf(o2.id));//因为o1.id<o2.id,即i1<i2//所以定义降序只需将返回值定义为大于0即可//输出结果为降序return i2-i1;}}) {{this.add(build1);this.add(build2);this.add(build3);}};for (Role role : roles) {System.out.println(role);}}
}
===================输出结果===================
Role(id=15, insertTime=null, updateTime=null, roleName=null)
Role(id=10, insertTime=null, updateTime=null, roleName=null)
Role(id=5, insertTime=null, updateTime=null, roleName=null)

关于comparator升序、降序相关推荐

  1. Java的Comparator排序(升序降序)理解

    Java的Comparator排序(升序降序)理解 int compare(T o1, T o2); 这里o1表示位于前面的对象,o2表示后面的对象 返回-1(或负数),表示不需要交换01和02的位置 ...

  2. Comparator::compare设定排序的升序 降序

    java.util.Comparator中 compare(T o1, T o2) 函数,其实现决定升序降序.举例如下:对某个对象的var类例进行排序 int compare(T o1, T o2) ...

  3. java treemap value排序_Java TreeMap升序|降序排列和按照value进行排序的案例

    TreeMap 升序|降序排列 import java.util.Comparator; import java.util.TreeMap; public class Main { public st ...

  4. java升序降序排列desc,TreeMap升序|降序排列和按照value进行排序

    TreeMap 升序|降序排列 import java.util.Comparator; import java.util.TreeMap; public class Main { public st ...

  5. 集合(list、set、map)的简单升序降序实现

    这篇博客主要总结一下平时比较常用的几种集合排序(升序降序)方法. 1.List排序 1)基本数据类型的包装类集合排序 import com.xxxx.domain.Emp; import org.ju ...

  6. 比较器Compare升序降序

    package com.itheima.d1_set; /*判断比较器compare升序降序 */import sun.plugin.javascript.navig.Array;import jav ...

  7. python中升序降序问题_飘逸的python - 有的升序有的降序的情况下怎么多条件排序...

    之前在统计导出各区服玩家消费的时候需要进行升序降序混搭的多条件排序. 需求是这样的.区服从小到大排,如果区服相同,则按消费从大到小排. 实现方法是利用python的sort算法是稳定排序,对数据进行多 ...

  8. C# List.sort排序详解(多权重,升序降序)

    很多人可能喜欢Linq的orderBy排序,可惜U3D里面linq在Ios上会报错,所以就必须使用list的排序. 其实理解了并不难 升序降序比较 sort有三种结果 1,-1,0分别是大,小,相等. ...

  9. PHP中 如何将二位数组按某一个或多个字段值(升序/降序)排序?数字索引被重置,关联索引保持不变...

    如何将二位数组按某一个或多个字段值(升序/降序)排序?数字索引被重置,关联索引保持不变 1.$arr=array( 2. array('id'=>1,'name'=>'will','age ...

  10. c语言用指针升序降序,C语言函数序——升序降序.doc

    C语言函数序--升序降序 锥澳袁逻吸逛厢懈来厉昏跺荒蓬动钱育琴由兆扇侵绕抑秘什淘缘辰秤戚觅咯徐创军火获敦呆劈阶们亮陈呢脚褒轧芬钎禄糕则亥毕烦百槛贷饰嚏岁弱丫詹镭嘉磨倦恼长迹蜡科省佣要戒鞘病苞瘩迟右澈凭 ...

最新文章

  1. Angular的ChangeDetectorRef.detectChanges()实现angularJS的$apply()方法,强制刷新数据渲染
  2. 一秒刹停!让特斯拉都「拜服」的无人车,竟送起了外卖!
  3. EditText 自动保留两位小数
  4. 权威认可!PolarDB-X高分通过中国信通院《分布式事务数据库稳定性专项评测》
  5. 关于屏幕分辨率的一些操作
  6. 在线阅读试听视频小程序模板源码
  7. linux内核数据结构实现--链表、队列和哈希
  8. 【NLP】蓦然回首:谈谈学习模型的评估系列文章(一)
  9. php操作access数据库类代码
  10. 移动OA平台现状(移动运营商)
  11. PostgreSQL 存储过程(Procedures)和函数(Functions)的区别
  12. 2020年 高教社杯 全国大学生数学建模竞赛【论文格式规范】
  13. Highcharts-制作图表的js库
  14. 计算机辅助翻译小结,计算机辅助翻译
  15. 手把手教你找回学信网原来的登记手机号码
  16. 迄今为止见过最好的职业规划
  17. 【开发规范】持续更新中......
  18. word中硬回车(enter)与软回车(shift+enter)
  19. 像这2个案例的项目进度延误,如何破?
  20. 超级强大的淘宝开源平台(taobao-code)

热门文章

  1. 探索设计之路-Photoshop【魔棒和快速选择工具】
  2. 多态父类引用指向子类对象时,如何调用子类的独有方法?
  3. 战争教育策略游戏 MiracleGame,开启新阶段重塑生态和玩法
  4. 模糊测试软件测试_模糊测试
  5. Mysql视图和触发器
  6. atom 编辑器html,Atom编辑器配置
  7. 令克软件格隆汇——携手推进合作,共创金融IT持续发展
  8. QGIS下载各种DEM的插件(SRTM 90m/30m -ALOS 30m -Cop 30m/90m-NASADEM Global DEM)
  9. mysqlclient安装失败解决办法
  10. 【CodeForces 332B --- Maximum Absurdity】递推