在 ArrayList 中查找对象
Find object in ArrayList
我想在 ArrayList
中找到一个 LegalEntity
对象。该对象可能是不同的实例。我只对它们是否代表相同的值感兴趣,即它们是否具有相同的主键。所有 LegalEntity
个实例都是由 EJB 从数据库值创建的:
List<LegalEntity> allLegalEntities = myEJB.getLegalEntityfindAll());
LegalEntity currentLegalEntity = myEJB.getLegalEntityfindById(123L);
我第一个幼稚的想法从来没有找到匹配项:
if (allLegalEntities.contains(currentLegalEntity)) {
}
然后我想也许我需要创建自己的 equals()
方法:
public boolean equals(LegalEntity other) {
return legalEntityId.equals(other.legalEntityId);
}
但是这个方法甚至没有被调用。有没有办法在不涉及循环的情况下在列表中查找对象?
我正在学习Java所以这很容易是我这边的一些愚蠢的误解。
如果您使用的是 Java 8,则可以使用流:
List<LegalEntity> allLegalEntities = myEJB.getLegalEntityfindAll());
LegalEntity currentLegalEntity = allLegalEntities.stream().filter(entity -> entity.getId() == 123L).findFirst();
你的方法是正确的,但你需要覆盖接受Object
:
的方法equals
@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
}
但是您还需要覆盖 hashCode
:
@Override
public int hashCode() {
// return a unique int
}
所以这可能不是最简单的解决方案。
另一种方法是使用 filter
:
LegalEntity myLegalEntity = myEJB.getLegalEntityfindAll().stream()
.filter(legalEntity -> legalEntity.getProperty().equals("someting"))
.findAny()
.orElse(null);
更多信息here
我想在 ArrayList
中找到一个 LegalEntity
对象。该对象可能是不同的实例。我只对它们是否代表相同的值感兴趣,即它们是否具有相同的主键。所有 LegalEntity
个实例都是由 EJB 从数据库值创建的:
List<LegalEntity> allLegalEntities = myEJB.getLegalEntityfindAll());
LegalEntity currentLegalEntity = myEJB.getLegalEntityfindById(123L);
我第一个幼稚的想法从来没有找到匹配项:
if (allLegalEntities.contains(currentLegalEntity)) {
}
然后我想也许我需要创建自己的 equals()
方法:
public boolean equals(LegalEntity other) {
return legalEntityId.equals(other.legalEntityId);
}
但是这个方法甚至没有被调用。有没有办法在不涉及循环的情况下在列表中查找对象?
我正在学习Java所以这很容易是我这边的一些愚蠢的误解。
如果您使用的是 Java 8,则可以使用流:
List<LegalEntity> allLegalEntities = myEJB.getLegalEntityfindAll());
LegalEntity currentLegalEntity = allLegalEntities.stream().filter(entity -> entity.getId() == 123L).findFirst();
你的方法是正确的,但你需要覆盖接受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
}
但是您还需要覆盖 hashCode
:
@Override
public int hashCode() {
// return a unique int
}
所以这可能不是最简单的解决方案。
另一种方法是使用 filter
:
LegalEntity myLegalEntity = myEJB.getLegalEntityfindAll().stream()
.filter(legalEntity -> legalEntity.getProperty().equals("someting"))
.findAny()
.orElse(null);
更多信息here