如何在Java对象的属性上应用包含函数?

如何在Java对象的属性上应用包含函数?,java,list,contains,Java,List,Contains,我有地址课程: public class Address{ private String city; private String pincode; private String state; } 我有一个不同对象的属性request作为private List transitlocation 如何检查transitLocations是否在一行中包含状态等于“SomeString”的地址 PS:请假设所有getter和setter都存在于代码中。 我不想重写equals

我有
地址
课程:

public class Address{
    private String city;
    private String pincode;
    private String state;
}
我有一个不同对象的属性
request
作为
private List transitlocation

如何检查
transitLocations
是否在一行中包含状态等于
“SomeString”
的地址

PS:请假设所有getter和setter都存在于代码中。
我不想重写equals,因为其他地方也使用了
Address
类。

您可以重写Address中对象类的方法,如下所示:

public boolean containsAddressWithState(List<Address> list, String state){
    return list.stream().filter(o -> o.getState().equals(state)).findFirst().isPresent();
}
public boolean equals(Object o){
        if(o instanceof Address && ((Address)o).getSomeString().equalsIgnoreCase(this.someString)){
            return true;
        }else {
            return false;
        }
    }
然后,您可以使用列表方法来验证元素(地址obj)是否存在于列表中。

不确定为什么提出了使用
过滤器
收集
的解决方案

您可以使用a并将其传递给

public boolean containsAddressWithState(

Collection@DurgeshSuthar的可能重复项是否要检查arraylist是否包含具有相同city、pincode和state的address对象?@user3437460:不是所有属性,只是state。@Dmitrop.我不想重写equals函数。更新了问题。然后您损害了address类的可重用性。equals方法应该验证city,pincode和state保持一致。@andrucz这取决于OP的要求,他希望自己的地址如何相等是的,但根据对象在特定位置的使用方式来创建equals和hashCode方法通常不是一个好主意。考虑到OP想要做什么而不影响可重用性的简单方法,我不会这样做您的回答是正确的。@ShekharKhairnar:andrucz是正确的。许多其他类使用Address类,但事实并非如此。@Durgesh Suthar:这完全取决于要求和功能。如果您对等式的要求是针对这种情况的特定属性的,那么只有您可以继续使用andrucz解决方案。这样更好。谢谢:)
public boolean equals(Object o){
        if(o instanceof Address && ((Address)o).getSomeString().equalsIgnoreCase(this.someString)){
            return true;
        }else {
            return false;
        }
    }
public boolean containsAddressWithState(
    Collection<? extends Address> collection, String state)
{
    return collection.stream().anyMatch(a -> a.getState().equals(state));
}