【situation】:
最近在工作中遇见了一个使用group by 分组,但是分组一直失败的问题,记录一下,之前一直觉得重写了equals方法就行,但是实际上必须要重写hashCode方法,代码如下:
并重写了实体类中的equals方法和hashCode方法(正确的):
(以下是错误的)因为自己本意是手写的那些属性相同则认为实体类相等,即equals中方法中写的那些属性相同,实体类就相同,但是错误的代码中,加了super父类中的信息,导致在计算hashCode的时候,hash值就不一致,更不会走到equals方法中(因为stream流中的group by 是通过hashMap实现的,首先是要计算hash值是否相同,若hash值相同才会调用equals方法进行比较,所以必须要重写hashCode方法,否则hash值不相等,直接就判断两个实体类不相等了),此外Object中的hashCode和equals方法的注释中也注明了,不重写hashCode会导致hashmap认为两个对象不相等
【task】:
搞清楚group by 分组失败的原因--->重写hashcode方法错误,加入了父类的hashCode,导致计算错误,其次,equals方法重写错误,不应带入父类的equals方法
【action】:
删除掉相关父类的hash方法和equals方法
【result】:
分组成功!!