java 自定义类比较器代码
java自定义类比较器
示例:
packagecom.myfile; importjava.util.ArrayList; importjava.util.Collections; importjava.util.Comparator; importjava.util.List; /** *Createdbytengfeion2017/10/27 */ publicclassCompareTest{ /** *内部比较器:Comparable,重写conpareTo方法 */ @SuppressWarnings("rawtypes") classStudent1implementsComparable{ privateStringname; privateintage; publicStudent1(intage,Stringname){ this.age=age; this.name=name; } @Override publicStringtoString(){ return"\tStudent1age:"+age+",name:"+name+"\r"; } @Override publicintcompareTo(Objecto){ Student1tmp=(Student1)o; intresult=tmp.aget2.age?1:(t1.age==t2.age?0:-1); returnresult=result==0?(t1.name.trim().compareTo(t2.name.trim())>0?1:-1):result; } @SuppressWarnings("unchecked") publicstaticvoidmain(String[]args){ CompareTestco=newCompareTest(); List list1=newArrayList (); list1.add(co.newStudent1(1,"aa")); list1.add(co.newStudent1(2,"abb")); list1.add(co.newStudent1(2,"acc")); list1.add(co.newStudent1(3,"dd")); Collections.sort(list1);//内部比较器:要排序的对象实现Comparable接口,可以对自身进行比较 System.out.println(list1); List list2=newArrayList (); list2.add(co.newStudent2(1,"aa")); list2.add(co.newStudent2(2,"abb")); list2.add(co.newStudent2(2,"acc")); list2.add(co.newStudent2(3,"dd")); Collections.sort(list2,newStudent2Comparator());//外部比较器:通过实现Comparator接口 System.out.println(list2); } } }
补充知识:Comparator类中的compare(To1,To2)和compareTo()的使用与疑惑解答
这几天做项目刚好遇到需要排序的需求,大概就是你查询一个list,然后list中保存的是map数据,你需要根据map中的若干个数据排序,比如说
List
这个里面我需要”先将type为7的优先排序置顶,然后剩下的根据code倒序排序“相信第一次碰到这个的朋友是一头雾水,但是compare和compareTo就能很好的解决这个问题。接下来你们先思考一下这个需求,要是你你会怎么做,接下来我会先将思路,然后顺带将这两个方法在其中的应用做一一解释。
思路:(相当于if-else的思路)如果两个比较的数据为7我们就将这两个数据根据code值排序,如果两个值一个是7一个是别的值,我们就将7排在这个值的前面,如果两个type都不是7,我们就优先比较type值,如果比较的是字符,那么compareTo比较的两个字符的acsII码
大概思路就是上面这个意思,然后我贴实现代码并把我开始学的时候迷茫的问题进行解答
1《compare(To1,To2)是中的o1,o2代表什么,是怎么实现排序的?怎么和compareTo()配合使用?
答:o1和o2每次只取一个数据,就一次只比较两个数据,假如比较7,8,9,5,6,那么第一次比较o1先取8,o2取7(很奇怪,我当时以为是顺着取值,但是很奇怪,他是相邻两个值逆着取值,但不管他,开心就好),接下来配合compareTo()实现这两个数的排序,o1.compareTo(o2)会返回一个int值,如果0说明o1和o2相等,如果返回负值,那么o1和o2会倒序排序,返回正值,那么o1和o2会正序排序。返回值之后这两个值就进行了排序,至此,这两个值已经排序好了,接下来第二次排序,o1取9,o2取8,第三次o1取5,o2取9.....
2《怎么进行多条件排序?
答:通过if进行条件筛选,看代码,下面我就将上面实现需求的代码实现,可以自己复制运行一下,有不懂的可以私信我
System.out.println(list); Collections.sort(list,newComparator
开始学的时候多打一点syso,看一下规则,一点一点找规则,看一下大手子是怎么做的,哈哈,不懂下面私我
以上这篇java自定义类比较器代码就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。