我有一個數據庫收到的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;
}
}
但在這種情況下,我不能強制轉換列表和ArrayList到SearchableList ... 我忍受這一點,但希望確保我沒有發明了自行車。
EDIT(十月'16):
當然,引進的lambda表達式在Java中8到這樣做的方法很簡單:
list.stream().anyMatch(dto -> dto.getId() == id);
我相信你的意思是'發明輪子'。 – Nishan
爲什麼不只是搜索列表? –
尼山,這正是我的意思,這是一個翻譯問題:D Ray Tayek,哇,這樣一個簡單而優雅的想法甚至沒有跨過我的腦海,我會確保我會嘗試一下,謝謝 – Sergey