检查对象列表包含字符串

时间:2018-04-16 13:42:44

标签: java

这是我的功能

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;
}
}

但比较覆盖不起作用。你可以帮帮我吗?

1 个答案:

答案 0 :(得分:2)

你无法比较香蕉和苹果。

这里:

    if (!types.contains(shift)) {

类型是指List of Typeshift是指String 除了使其正常运行之外,equals()方法还应将StringType进行比较。这不是一个好主意,因为它永远不会反身。

在您的情况下,您不需要重写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;
}