3 回答
TA贡献1858条经验 获得超8个赞
由于列表包含Candy对象,该contains()方法需要一个Candy对象进行比较,因此不能使用contains("Caramel").
要检查列表是否包含Candy带有nameof的对象"Caramel",您可以使用 Java 8+ Streams 进行搜索:
CandyDao.getAllCandys().stream().Map(Candy::getName).anyMatch("Caramel"::equals);
等效的非流版本将是:
boolean hasCaramel = false;
for (Candy candy : CandyDao.getAllCandys()) {
if ("Caramel".equals(candy.getName())) {
hasCaramel = true;
break;
}
}
TA贡献1836条经验 获得超13个赞
覆盖equals&hashcode方法如下:
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Candy candy = (Candy) o;
return Objects.equals(name, candy.name);
}
@Override
public int hashCode() {
return Objects.hash(name);
}
现在,由于 equals 函数只检查Candy对象的名称是否相等,因此以下应该起作用:
CandyDao.getAllCandys().contains(new Candy("Caramel", 0, true)) . //2nd & 3rd arg of Candy constructor are inessential/dummy
TA贡献1815条经验 获得超12个赞
您应该覆盖该Object#equals方法,Candy如下所示:
@Override
public boolean equals(Object o) {
if (!(o instanceof Candy)) {
return false;
}
Candy that = (Candy) o;
return Objects.equals(that.getName(), this.getName());
}
覆盖后,如果名称匹配,List#contains则应返回true。
添加回答
举报