我有一个从数据库中接收到的DTO列表,它们都有一个ID。我想确保我的列表中包含一个具有指定ID的对象。显然,在这种情况下创建一个带有期望字段的对象是没有帮助的,因为contains()需要调用Object.equals()方法,而它们不会相等。
我想到了一个解决方案:创建了一个接口HasId
,在所有的DTO中实现它,并通过一个新类继承ArrayList,该类具有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;
}
}
但在这种情况下,我不能将List和ArrayList强制转换为SearchableList...
我可以忍受这一点,但希望确保我没有重复造轮子。
编辑('16年10月):
当然,随着Java 8中lambda的引入,实现这一点的方法非常简单:
list.stream().anyMatch(dto -> dto.getId() == id);