Search code examples
javajava-6

Find object in ArrayList


I want to find a LegalEntity object in an ArrayList. The object can possibly be a different instance. I'm only interested in whether they represent the same value, i.e. they have the same primary key. All LegalEntity instances are created from database values by EJB:

List<LegalEntity> allLegalEntities = myEJB.getLegalEntityfindAll());
LegalEntity currentLegalEntity = myEJB.getLegalEntityfindById(123L);

My first naive idea never finds matches:

if (allLegalEntities.contains(currentLegalEntity)) {
}

I then thought that perhaps I need to create my own equals() method:

public boolean equals(LegalEntity other) {
    return legalEntityId.equals(other.legalEntityId);
}

But this method is not even being invoked. Is there a way to find an object in a list that doesn't involve looping?

I'm learning Java so it might easily be some foolish misunderstanding on my side.


Solution

  • Your approach is correct, but you need to override the method equals that accepts an Object:

    @Override
    public boolean equals(Object obj) {
        if (this == obj)
            return true;
        if (obj == null)
            return false;
        if (getClass() != obj.getClass())
            return false;
        LegalEntity other = (LegalEntity) obj;
        // check if equals based one some properties
    }
    

    However you also need to override hashCode:

    @Override
    public int hashCode() {
        // return a unique int
    }
    

    So this might not be the easiest solution.

    Another approach is to use filter:

    LegalEntity myLegalEntity = myEJB.getLegalEntityfindAll().stream()
                                  .filter(legalEntity -> legalEntity.getProperty().equals("someting"))
                                  .findAny()
                                  .orElse(null);
    

    More info here