【发布时间】:2011-11-20 20:01:12
【问题描述】:
我有一个从数据库收到的 DTO 列表,它们有一个 ID。我想确保我的列表包含具有指定 ID 的对象。显然,在这种情况下创建具有预期字段的对象将无济于事,因为 contains() 调用 Object.equals(),它们不会相等。
我想出了一个这样的解决方案:创建一个接口 HasId,在我所有的 DTO 中实现它,并使用具有 contains(Long id) 方法的新类继承 ArrayList。
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);
【问题讨论】:
-
我确定您的意思是“发明轮子”。
-
为什么不直接搜索列表
? -
尼山,这正是我的意思,这是一个翻译问题:D Ray Tayek,哇,这么简单而优雅的想法我什至没有想到,我会确保我'试试看,谢谢
-
不确定我是否可以将 List
类型转换为 List -
感谢您使用 anyMatch() 方法进行编辑。
标签: java list object arraylist contains