检查Collection是否包含Object内的Object

时间:2011-01-07 15:24:02

标签: java

public class Address{
 private TypeAddress typeAddress;
 private String street;
 //Getters and Setters
 ...
}

public class TypeAddress{
  private String type;
  //Getters and Setters
  ...
}

我有一个地址集

Collection<Address> addresses = db.getAddresses();

我需要检查客户是否会选择任何类型的地址。 它只是假装一种情况所以你们会理解。

我想要的是,我想获得一种类型的地址,即客户选择的那种类型。如果他选择了一个不存在的类型,我会选择另一个地址。 所以,我基本上需要做2个循环来检查它是否有任何类型,如果有,我将在下一个循环中选择它。如果不是,我会在下一个循环中选择另一个。 有没有办法使用Collection的contains方法来检查地址的类型是否是我想要的?

类似的东西:

if(addresses.contains("someType")){//remind that I'm trying to check not the object Address, but the object TypeAddress
 //get this address
}else{
 //get another address
}

6 个答案:

答案 0 :(得分:2)

如果您被迫使用集合(而不是像建议的Map),为什么不能只迭代一次并将最“有希望”的实例存储为一些地址引用:

Address address = null;
for (Address addr : addresses) {
    if ( isBetterThanAlreadyFound(addr, address) ) {
        address = addr;
    }
}


private static boolean isBetterThanAlreadyFound(Address addr, Address alreadyFound) {
    return alreadyFound == null || (addr.isOfDesiredType() && alreadyFound.isNot());
}

答案 1 :(得分:0)

使用Map<TypeAddress, Address>,以便您可以验证是否存在必要的地址,并使其相对快速和轻松。

Map<TypeAddress, Address> addresses = new HashMap<TypeAddress, Address>();

//put something and then
TypeAddress type = getType();
Address address = addresses.get(type);
if (address != null) {
    return address;
} else {
   //do smth else
}

不要忘记以适当的方式覆盖类equals的方法hashCodeTypeAddress

答案 2 :(得分:0)

甚至包含内部循环逻辑,使用Map代替

答案 3 :(得分:0)

我认为您可能正在寻找一种方法来摆脱循环,或者在循环开始时继续使用的方法。方便的是,它们被称为breakcontinue

for (Address address : addresses) {
    if (!address.getType.equals("someType")) continue;
    myAddress = address;
}

OR

for (Address address : addresses) {
    if (address.getType.equals("someType")) {
        myAddress = address;
        break;
    }
}

答案 4 :(得分:0)

您可以使用Apache CollectionUtils API:

Predicate p = new Predicate()
{
 public boolean evaluate(Object o)
 {
   return ((Adress) o).getTypeAddress().getType().equals(TYPE_INPUTED_BY_USER);
 }
}

return CollectionUtils.exists(p);

答案 5 :(得分:0)

Error:MySQL shutdown unexpectedly.
This may be due to a blocked port, missing dependencies, improper privileges, a crash, or a shutdown by another method.
Press the Logs button to view error logs and check the Windows Event Viewer for more clues If you need more help, copy and post this entire log window on the forums.