使用Java怎么实现一个比较器?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。
创新互联公司服务项目包括白沙黎族网站建设、白沙黎族网站制作、白沙黎族网页制作以及白沙黎族网络营销策划等。多年来,我们专注于互联网行业,利用自身积累的技术优势、行业经验、深度合作伙伴关系等,向广大中小型企业、政府机构等提供互联网行业的解决方案,白沙黎族网站推广取得了明显的社会效益与经济效益。目前,我们服务的客户以成都为中心已经辐射到白沙黎族省份的部分城市,未来相信会继续扩大服务区域并继续获得客户的支持与信任!
Java的特点有哪些 1.Java语言作为静态面向对象编程语言的代表,实现了面向对象理论,允许程序员以优雅的思维方式进行复杂的编程。 2.Java具有简单性、面向对象、分布式、安全性、平台独立与可移植性、动态性等特点。 3.使用Java可以编写桌面应用程序、Web应用程序、分布式系统和嵌入式系统应用程序等。
Java 比较器
Java 中有两种比较器的实现方式:Comparable(内部比较器) 与 Comparator(外部比较器)。
3.1 Comparable 接口
代码模板:
public class Entity implements Comparable<Entity> { @Override public int compareTo(Entity o) { return 0; } }
Comparable 接口支持泛型参数,所以一个需要比较实体类只需要按照上面的代码模板实现 Comparable 接口,即可对传入的另一个同类型的实体类进行比较啦。
因为比较方法是定义在实体类中,所以把它叫做内部比较器。
3.2 Comparator 接口
代码模板:
public class EntityComparator implements Comparator<Entity> { @Override public int compare(Entity o1, Entity o2) { return 0; } }
Comparator 接口同样也支持泛型参数。不同的是它是一个比较器类,所以叫它外部比较器。比较器类使用更灵活,我们可以定义多个比较器类用于不同的排序场景。
4 实战
因为业务场景需要先对【状态】分组排序后,然后再对【时长】排序,而【时长】的排序又可分为正序与逆序两种,所以我们采用 Java 外部比较器来实现该业务逻辑。
待比较的实体类:
public class Record { //状态 private String state; //时长 private String time; public Record(String state, String time) { this.state = state; this.time = time; } public String getState() { return state; } public String getTime() { return time; } @Override public String toString() { return "Record{" + "state='" + state + '\'' + ", time='" + time + '\'' + '}'; } }
比较器 A:先对【状态】排序,然后再对【时长】按正序排序
public class RecordComparator implements Comparator<Record> { @Override public int compare(Record o1, Record o2) { final int stateCompare = o1.getState().compareTo(o2.getState()); if (stateCompare == 0) { return o1.getTime().compareTo(o2.getTime()); } return stateCompare; } }
比较器 B:先对【状态】排序,然后再对【时长】按逆序(倒序)排序
public class RecordTimeDescComparator implements Comparator<Record> { @Override public int compare(Record o1, Record o2) { final int stateCompare = o1.getState().compareTo(o2.getState()); if (stateCompare == 0) { return o2.getTime().compareTo(o1.getTime()); } return stateCompare; } }
单元测试:
Record record1 = new Record("通话中", "00:01:08"); Record record2 = new Record("空闲", "00:18:02"); Record record3 = new Record("通话中", "00:04:04"); Record record4 = new Record("空闲", "00:01:57"); List<Record> recordList = new ArrayList<>(); recordList.add(record1); recordList.add(record2); recordList.add(record3); recordList.add(record4); System.out.println("排序前:" + recordList); Collections.sort(recordList, new RecordComparator()); System.out.println("排序后【时间正序】:" + recordList); recordList = new ArrayList<>(); recordList.add(record1); recordList.add(record2); recordList.add(record3); recordList.add(record4); System.out.println("排序前:" + recordList); Collections.sort(recordList, new RecordTimeDescComparator()); System.out.println("排序后【时间倒序】:" + recordList);
输出结果:
排序前:[Record{state='通话中', time='00:01:08'}, Record{state='空闲', time='00:18:02'}, Record{state='通话中', time='00:04:04'}, Record{state='空闲', time='00:01:57'}]
排序后【时间正序】:[Record{state='空闲', time='00:01:57'}, Record{state='空闲', time='00:18:02'}, Record{state='通话中', time='00:01:08'}, Record{state='通话中', time='00:04:04'}]
排序前:[Record{state='通话中', time='00:01:08'}, Record{state='空闲', time='00:18:02'}, Record{state='通话中', time='00:04:04'}, Record{state='空闲', time='00:01:57'}]
排序后【时间倒序】:[Record{state='空闲', time='00:18:02'}, Record{state='空闲', time='00:01:57'}, Record{state='通话中', time='00:04:04'}, Record{state='通话中', time='00:01:08'}]
看完上述内容,你们掌握使用Java怎么实现一个比较器的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注创新互联行业资讯频道,感谢各位的阅读!
文章名称:使用Java怎么实现一个比较器
分享路径:https://www.cdcxhl.com/article38/jijisp.html
成都网站建设公司_创新互联,为您提供静态网站、全网营销推广、网站策划、手机网站建设、品牌网站设计、品牌网站制作
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联