Java中Comparator与Comparable排序的区别详解
场景
java中进行排序比较时Comparator与Comparable区别:
如果你有一个类,希望支持同类型的自定义比较策略,可以实现接口Comparable
如果某个类,没有实现Comparable,但是又希望对它进行比较,则可以自定义一个Comparator,来定义这个类的比较规则
使用Comparable进行排序比较
新建类CompareDemo,并添加code和age属性,该类实现Comparable接口
并重新compareTo方法
public class CompareDemo implements Comparable<CompareDemo>{ int code; int age; public CompareDemo(int code, int age) { this.code = code; this.age = age; } @Override public int compareTo(CompareDemo o) { if(code == o.code){ return 0; }else if(code<o.code){ return -1; }else{ return 0; } } }
进行排序比较,默认根据code进行升序比较
List<CompareDemo> list = new ArrayList<CompareDemo>(){{ add(new CompareDemo(10,20)); add(new CompareDemo(12,30)); add(new CompareDemo(11,10)); }}; list.forEach(compareDemo -> System.out.println(compareDemo.code)); //默认根据code进行升序比较 list.sort(null); list.forEach(compareDemo -> System.out.println(compareDemo.code));
如果现在需求变了,希望针对age字段,进行升序排序,那么就可以利用Comparator实现。
使用Comparator进行排序
list.sort(new Comparator<CompareDemo>() { @Override public int compare(CompareDemo o1, CompareDemo o2) { if (o1.age == o2.age) { return 0; } else if (o1.age < o2.age) { return -1; } else { return 1; } } }); list.forEach(compareDemo -> System.out.println(compareDemo.age));
上面的排序可以简化为
list.sort(new Comparator<CompareDemo>() { @Override public int compare(CompareDemo o1, CompareDemo o2) { return Integer.compare(o1.age,o2.age); } });
在JDK1.8中还可以更简化
list.sort(Comparator.comparingInt(o -> o.age));
如果希望倒序
list.sort(new Comparator<CompareDemo>() { @Override public int compare(CompareDemo o1, CompareDemo o2) { return Integer.compare(o2.age,o1.age); } });
在jdk1.8中,使用负数
list.sort(Comparator.comparingInt(o->-o.age)); list.forEach(compareDemo -> System.out.println(compareDemo.age));
到此这篇关于Java中Comparator与Comparable排序的区别详解的文章就介绍到这了,更多相关Comparator与Comparable区别内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
基于Failed to load ApplicationContext异常的解决思路
这篇文章主要介绍了基于Failed to load ApplicationContext异常的解决思路,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教2022-01-01详解MyBatis-Puls中saveBatch批量添加慢的问题
本文主要介绍了详解MyBatis-Puls中saveBatch批量添加慢的问题,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧2023-01-01
最新评论