Tengo una lista de DTO recibida de un DB, y tienen una identificación. Quiero asegurarme de que mi lista contiene un objeto con una ID especificada. Aparentemente, crear un objeto con campos esperados en este caso no ayudará porque contiene() llamadas para Object.equals(), y no serán iguales.Averiguar si una lista de Objetos contiene algo con un valor de campo especificado?
Vine a una solución como esa: creé una interfaz HasId
, la implementé en todos mis DTOs, y he heredado ArrayList con una nueva clase que tiene el método 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;
}
}
Pero en este caso no puedo encasillado de lista y ArrayList a SearchableList ... Viviría con eso, pero quería asegurarse de que no estoy inventando la bicicleta.
EDITAR (octubre '16):
Por supuesto, con la introducción de lambdas en Java 8 la manera de hacer esto es sencillo:
list.stream().anyMatch(dto -> dto.getId() == id);
Estoy seguro de que quería decir 'Inventar la rueda'. – Nishan
¿por qué no buscar una lista? –
Nishan, esto es exactamente lo que quise decir, era un problema de traducción: D Ray Tayek, wow, una idea tan simple y elegante ni siquiera se me pasó por la cabeza, me aseguraré de probarlo, gracias – Sergey