过关展将之——birthday排序(年月日排序)

编程入门 行业动态 更新时间:2024-10-21 09:49:32

过关展将之——birthday排序(<a href=https://www.elefans.com/category/jswz/34/1763803.html style=年月日排序)"/>

过关展将之——birthday排序(年月日排序)

传统的方法排序,需要嵌套多重循环,代码可读性不高,代码冗余

就像下面这样:

 public int compare(Employee o1, Employee o2) {if (!(o1.getName() != null && o2.getName() != null)) {throw new RuntimeException("员工姓名不能为空!");}else{if (o1.getName().equals(o2.getName())) {if (o1.getBirthday().getYear() == o2.getBirthday().getYear()) {if (o1.getBirthday().getMonth() == o2.getBirthday().getMonth()) {if (o1.getBirthday().getDay() == o2.getBirthday().getDay()) {return 0;} else if (o1.getBirthday().getDay() > o2.getBirthday().getDay()) {return 1;} else {return -1;}} else if (o1.getBirthday().getMonth() > o2.getBirthday().getMonth()) {return 1;} else {return -1;}} else if (o1.getBirthday().getYear() > o2.getBirthday().getYear()) {return 1;} else {return -1;}} else {return o1.getName()pareTo(o2.getName());}}}

 在看这样一段代码,是不是进一步清晰了一点呢?其实下面代码依旧没摆脱使用if语句嵌套的命运,代码还是不够简洁,句式杂糅,可读性差:

  public int compare(EmployeeImp o1, EmployeeImp o2) {if (!(o1 instanceof EmployeeImp && o2 instanceof EmployeeImp)) {System.out.println("类型不匹配");return 0;}//比较nameint i = o1.getName()pareTo(o2.getName());if (i==0) {//如果名字相同,就继续比较int yearMinus =o1.getBirthday().getYear() - o2.getBirthday().getYear();if(yearMinus==0){//如果两个年份相同,继续比较月份int monthMinus = o1.getBirthday().getMonth()- o2.getBirthday().getMonth();if(monthMinus==0){//如果两个月份相同,继续比较日int dayMinus = o1.getBirthday().getDay()- o2.getBirthday().getDay();if(dayMinus==0){return 0;}else{return dayMinus;}}else{return monthMinus;}}else{return yearMinus;}} else{//如果名字不相同,就返回,出结果return i;}}

 在看下面一段带码:我们使用过关斩将法,将杂糅的if嵌套格式分解出来,变成一步一步执行的if语句:看起来是不是清晰多了?

public int compare(EmployeeImp o1, EmployeeImp o2) {if (!(o1 instanceof EmployeeImp && o2 instanceof EmployeeImp)) {System.out.println("类型不匹配");return 0;}//比较nameint i = o1.getName()pareTo(o2.getName());if (i != 0) {//如果名字不相同,直接返回return i;}//以下是对birthday的比较,因此,我们最好把这个比较,放在MyDateint yearMinus = o1.getBirthday().getYear() - o2.getBirthday().getYear();if (yearMinus != 0) {//如果两个年份不相同,直接返回return yearMinus;}int monthMinus = o1.getBirthday().getMonth() - o2.getBirthday().getMonth();if (monthMinus != 0) {//如果两个月份不相同,直接返回return monthMinus;}//如果year、month都相同return o1.getBirthday().getDay() - o2.getBirthday().getDay();}

传送门,另一个过关斩将法的小案例:过关斩将法:验证输入的用户信息:-CSDN博客

希望可以帮助你,提升代码能力!

更多推荐

过关展将之——birthday排序(年月日排序)

本文发布于:2023-12-04 15:48:00,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1661429.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:将之   年月日   birthday

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!