Sergey Sergey - 1 year ago 68
Java Question

Finding out if a list of Objects contains something with a specified field value?

I have a list of DTO received from a DB, and they have an ID. I want to ensure that my list contains an object with a specified ID. Apparently creating an object with expected fields in this case won't help because contains() calls for Object.equals(), and they won't be equal.

I came up to a solution like so: created an interface

, implemented it in all my DTOs, and inherited ArrayList with a new class that has
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;

But in this case I can't typecast List and ArrayList to SearchableList...
I'd live with that, but wanted to make sure that I'm not inventing the bicycle.

EDIT (Oct '16):

Of course, with the introduction of lambdas in Java 8 the way to do this is straightforward: -> dto.getId() == id);

Answer Source

I propose to create simple static method like you wrote, without any additional interfaces:

public static boolean containsId(List<DTO> list, long id) {
    for (DTO object : list) {
        if (object.getId() == id) {
            return true;
    return false;
Recommended from our users: Dynamic Network Monitoring from WhatsUp Gold from IPSwitch. Free Download