找出对象列表是否包含具有指定字段值的内容?
我有一个从数据库收到的DTO列表,他们有一个ID。我想确保我的列表包含具有指定 ID 的对象。显然,在这种情况下,创建一个具有预期字段的对象将无济于事,因为 contains() 调用 Object.equals(),并且它们不会相等。
我得到了一个这样的解决方案:创建一个接口,在我所有的DTO中实现它,并使用具有方法的新类继承ArrayList。HasId
contains(Long id)
public interface HasId {
void setId(Long id);
Long getId();
}
public class SearchableList<T extends HasId> extends ArrayList<T> {
public boolean contains(Long id) {
for (T o : this) {
if (o.getId() == id)
return true;
}
return false;
}
}
但是在这种情况下,我无法将列表和数组列表类型转换为可搜索列表...我会忍受这一点,但想确保我没有发明轮子。
编辑(2016年10月):
当然,随着Java 8中lambdas的引入,做到这一点的方法很简单:
list.stream().anyMatch(dto -> dto.getId() == id);