Mam listę DTO otrzymanych z DB i mają identyfikator. Chcę się upewnić, że moja lista zawiera obiekt o określonym ID. Wygląda na to, że tworzenie obiektu z oczekiwanymi polami w tym przypadku nie pomoże, ponieważ wywołuje() wywołania Object.equals() i nie będą one równe.Sprawdzanie, czy lista obiektów zawiera coś z określoną wartością pola?
Podszedłem do rozwiązania takiego jak: stworzyłem interfejs HasId
, zaimplementowałem go we wszystkich moich DTO i odziedziczyłem ArrayList nową klasą, która ma metodę 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;
}
}
Ale w tym przypadku nie mogę typecast Lista i ArrayList do SearchableList ... bym z tym żyć, ale chciałem się upewnić, że nie jestem wynalezienie roweru.
EDIT (październik '16):
Oczywiście, wraz z wprowadzeniem lambda w Java 8 Sposobem na to jest prosta:
list.stream().anyMatch(dto -> dto.getId() == id);
Jestem pewien, że chodziło Ci o "Wymyślanie koła". – Nishan
dlaczego nie po prostu przeszukać listę? –
Nishan, dokładnie to miałem na myśli, to był problem z tłumaczeniem: D Ray Tayek, łał, taki prosty i elegancki pomysł nawet mi nie przyszedł, upewnię się, że go wypróbuję, dziękuję – Sergey