Ser*_*gey 28 java contains list arraylist object
我有一个从数据库收到的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;
}
}
Run Code Online (Sandbox Code Playgroud)
但在这种情况下,我不能将List和ArrayList强制转换为SearchableList ......我会接受它,但我想确保我不是在发明自行车.
编辑(2016年10月):
当然,随着Java 8中lambda的引入,这样做的方法很简单:
list.stream().anyMatch(dto -> dto.getId() == id);
Run Code Online (Sandbox Code Playgroud)
Nik*_*zov 49
我建议像你写的那样创建简单的静态方法,而不需要任何额外的接口:
public static boolean containsId(List<DTO> list, long id) {
for (DTO object : list) {
if (object.getId() == id) {
return true;
}
}
return false;
}
Run Code Online (Sandbox Code Playgroud)
我建议你只是覆盖equals你的SearchableDto内容就像:
public boolean equals(Object o){
if (o instanceof SearchableDto){
SearchableDto temp = (SearchableDto)o;
if (this.id.equals(temp.getId()))
return true;
}
return false;
}
Run Code Online (Sandbox Code Playgroud)
在这种情况下,contains如果它有相同的话应该可以工作id;