Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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 HasId, implemented it in all my DTOs, and inherited ArrayList with a new class that has contains(Long id) method.

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 wheel.

EDIT (Oct '16):

Of course, with the introduction of lambdas in Java 8 the way to do this is straightforward:

list.stream().anyMatch(dto -> dto.getId() == id); 
like image 499
Sergey Avatar asked Sep 20 '11 07:09

Sergey


People also ask

How do you check if a list of object contains a value?

You can use the Enumerable. Where extension method: var matches = myList.

How do you check if ArrayList contains a value in an object?

contains() method can be used to check if a Java ArrayList contains a given item or not. This method has a single parameter i.e. the item whose presence in the ArrayList is tested. Also it returns true if the item is present in the ArrayList and false if the item is not present.

How do I get a list of fields from a list of objects?

The list of all declared fields can be obtained using the java. lang. Class. getDeclaredFields() method as it returns an array of field objects.


1 Answers

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; } 
like image 107
Mikita Belahlazau Avatar answered Oct 18 '22 18:10

Mikita Belahlazau