Выяснить, содержит ли список Объектов что-то с заданным значением поля?

У меня есть список 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;
    }
}

Но в данном случае я не могу набрать List и ArrayList в SearchableList... Я бы с этим смирился, но хотел убедиться, что я не изобретаю велосипед.

EDIT (Oct '16):

Конечно, с введением ягнят на Java 8 путь к этому прост:

list.stream().anyMatch(dto -> dto.getId() == id);
28
задан Sergey 24 October 2016 в 08:24
поделиться