Álvaro González
Álvaro González

Reputation: 146390

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.

Upvotes: 3

Views: 162

Answers (2)

Marc
Marc

Reputation: 3245

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

Upvotes: 2

Joakim R&#246;nning
Joakim R&#246;nning

Reputation: 11

If you're using Java 8 you can use streams:

List<LegalEntity> allLegalEntities = myEJB.getLegalEntityfindAll());
LegalEntity currentLegalEntity = allLegalEntities.stream().filter(entity -> entity.getId() == 123L).findFirst();

Upvotes: 1

Related Questions