如何在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));
}