comparable接口_Java技能 —— 关于Object的 equals方法以及 Comparable<T>接口的运用...

本文探讨了如何在Java开发中通过重写equals方法和实现Comparable接口解决对象对等判断及List排序问题。实例演示了如何让Student对象根据ID一致被视为同一对象,并简化获取有序列表的过程。
摘要由CSDN通过智能技术生成

1. 业务场景

在我们日常开发各种业务场景中,经常会判断字段之间的对等,比如会用到这些方法StringUtils.isNotBank(XXX) , "XXX".equals("XXX")。

如果是两个对象之间,要作为对比,直接使用默认的equals方法就会出现问题,例如 Student A = studentDao.selectById(12138),

Student B = studentDao.selectById(12138),A.equals(B) ——> false。实际上,在我们业务处理上,这两个对象应该属于同一个人,也就是希望返回true。

另外有一个场景,List<Student> list ,希望list能简便获取到顺序排序的列表,如果用for循环则过于麻烦,结合上述说明,做出技能解析。

2. 编写示例代码

import 

3. 测试用例与结果分析

A. 重写equals方法,两个对象的主键ID相等,业务上认为两个对象是一样。

public 

结果如下:

f3aaa9b67e21db9ac8fd1b2117aa6957.png

经过测试符合期望,重写该方法之后,list.contains(XXX)也是同样有效果的。如下图

0e3f28c9c31f78fe7741b780365318da.png

B. 实现 Comparable<T>接口,更方便的获取List<Object>顺序列表

public 

3bb2a240b408e00fb1e2d40867027d7a.png

经过测试验证符合预期结果,而且比较简便的用一句代码将list进行排序。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
JavaComparable接口定义了一个compareTo方法,用于比较类的对象之间的大小关系。实现Comparable接口的类可以使用Arrays.sort()和Collections.sort()进行排序。 实现Comparable接口的类需要重写compareTo方法,该方法返回一个整数值,表示当前对象与另一个对象的大小关系。如果当前对象小于另一个对象,则返回负整数;如果当前对象等于另一个对象,则返回0;如果当前对象大于另一个对象,则返回正整数。 以下是一个示例实现Comparable接口的类: ``` public class Person implements Comparable&lt;Person&gt; { private String name; private int age; public Person(String name, int age) { this.name = name; this.age = age; } public String getName() { return name; } public int getAge() { return age; } @Override public int compareTo(Person o) { return this.age - o.getAge(); } } ``` 在上面的示例,Person类实现了Comparable接口,并重写了compareTo方法。该方法比较两个Person对象的年龄大小关系。 如果要对Person对象进行排序,可以使用Arrays.sort()或Collections.sort()方法。例如: ``` Person[] persons = new Person[] { new Person("Tom", 25), new Person("Jack", 18), new Person("Mary", 30) }; Arrays.sort(persons); for (Person person : persons) { System.out.println(person.getName() + " " + person.getAge()); } ``` 该示例,使用Arrays.sort()对Person对象数组进行排序,按照年龄从小到大排序。最后输出排序后的结果。 需要注意的是,实现Comparable接口的类必须能够比较大小,否则可能会抛出ClassCastException异常。因此,在重写compareTo方法时,应该考虑到类的属性是否可以比较大小。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值