过滤集合里重复对象的坑
工作中需要过滤集合里的该对象,根据workId 比较
代码如下
public static void main(String[] args) {
final List<PositionVo> positionVos = new ArrayList<>();
final PositionVo positionVo = new PositionVo();
positionVo.setWorkId(2);
positionVo.setWorkerName("daf");
positionVos.add(positionVo);
final PositionVo positionVo2 = new PositionVo();
positionVo2.setWorkId(2);
positionVo2.setWorkerName("daf2");
positionVos.add(positionVo2);
final List<PositionVo> collect = positionVos.stream().distinct().collect(Collectors.toList());
System.out.println(collect);
}
但发现执行后仍然是两条,很明显需要重写hashcode和equals方法
@Data
public class PositionVo {
private String filePath;
private String floor;
private String posX;
private String posY;
private String posZ;
private String workerName;
private Integer workId;
private String devicedId;
@Override
public boolean equals(final Object o) {
if (this == o) {
return true;
}
if (o == null || getClass() != o.getClass()) {
return false;
}
if (!super.equals(o)) {
return false;
}
final PositionVo that = (PositionVo) o;
return Objects.equals(workId, that.workId);
}
@Override
public int hashCode() {
return Objects.hash(super.hashCode(), workId);
}
}
用idea 快键键自动生成,后来让同事也实验了下
java
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
PositionVo that = (PositionVo) o;
return Objects.equals(workId, that.workId);
}
@Override
public int hashCode() {
return Objects.hash(workId);
}
发现不同的版本idea生成的equals 和hashcode 方法不同,造成去重失效
本人用的2017.7版本,所以鉴于此问题,请升级高版本问题