Java8 Comparator源码演示及解析
在前面一篇JavaComparable和Comparator对比详解中,对于java中的排序方法进行比较和具体剖析,主要是针对Comparator接口和Comparable接口,无论是哪种方式,都需要实现这个接口,并且重写里面的方法。
Java8中对其进行了优化,直接调用Comparator类即可实现一些自定义的排序功能,比如按照某个字段升序,并且按照某个字段降序排列;还有如果出现null的情况怎么处理等等。下面是针对常见的基础数据类型的list和对象的集合进行排序的演示。
/** *关于java8中的Comparator排序方法 */ publicclassCompareController2{ publicstaticvoidmain(String[]args){ /** *对常见的list等进行升序和降序 */ Listlist=Arrays.asList(10,133,34,546,53,345); //自然顺序,升序 list.sort(Comparator.naturalOrder()); System.out.println(list); //降序 list.sort(Comparator.reverseOrder()); System.out.println(list); /** *对于对象的排序 */ List studentsList=newArrayList<>(); studentsList.add(newStudents("zhangSan",28,"beiJing")); studentsList.add(newStudents("liSi",25,"shangHai")); studentsList.add(newStudents("wangWu",22)); studentsList.sort(Comparator.comparing(Students::getName)); System.out.println("按照姓名升序:"+studentsList); studentsList.sort(Comparator.comparing(Students::getAge).reversed()); System.out.println("按照年龄降序:"+studentsList); studentsList.sort(Comparator.comparing(Students::getAddress,Comparator.nullsLast(String::compareTo)).reversed()); System.out.println("按照地址降序,若有空,放到最前面:"+studentsList); studentsList.sort(Comparator.comparing(Students::getAddress,Comparator.nullsFirst(String::compareTo)).reversed()); System.out.println("按照地址降序,若有空,放到最后面:"+studentsList); studentsList.sort(Comparator.comparing(Students::getAddress,Comparator.nullsLast(String::compareTo)).reversed().thenComparing(Students::getAge)); System.out.println("按照地址降序,若有空,放到最前面,然后再按照年龄升序:"+studentsList); } }
Comparator的源码解析
最近的学习,让我意识到了看源码的重要性,所以分析完Comparator如何使用后,继续研究源码。
1)首先看下comparing的源码,其实就是compareTo方法。
2)接下看下thenComparing方法,其实就是compare方法,和我们实现某个接口并且重写里面的方法类似,只不过Comparator在底层帮我们实现了。
3)最后来看下比较有趣的nullsFirst方法和nullsLast方法,两个方法其实主要就是nullFirst的标志位不同,其底层仍然是实现compare方法,只不过加了一个对于null的判断,还有一个是根据nullFirst的标志位的判断。Get!!!
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。