这是我的功能
private static List<Types> getShiftTypes() {
List<Types> types = new ArrayList<>();
for (String shift : shifts_arr_t) {
if (!types.contains(shift)) {
types.add(new Types(shift));
}
}
return types;
}
类型:
public class Types
{
String type;
int count;
public Types(String type) {
this.type = type;
}
@Override
public boolean equals(Object object)
{
boolean sameSame = false;
if (object != null && object instanceof Types)
{
sameSame = this.type == ((Types) object).type;
}
return sameSame;
}
}
但比较覆盖不起作用。你可以帮帮我吗?
答案 0 :(得分:2)
你无法比较香蕉和苹果。
这里:
if (!types.contains(shift)) {
类型是指List of Type
,shift
是指String
除了使其正常运行之外,equals()
方法还应将String
与Type
进行比较。这不是一个好主意,因为它永远不会反身。
在您的情况下,您不需要重写equals()/ hashCode(),而是创建而不是在types
上迭代的方法,并根据String
返回true或false来测试等于Type
中任何元素的types
字段值
或者作为更直接的替代方案,使用具有Predicate
的流,例如:
private static List<Types> getShiftTypes() {
List<Types> types = new ArrayList<>();
for (String shift : shifts_arr_t) {
if (types.stream().anyMatch(t -> t.getType().equals(shift))) {
types.add(new Types(shift));
}
}
return types;
}