2011-01-07 125 views
-1
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循环来检查是否有任何类型,如果有的话,我会在下一个循环中选择它。如果不是,我会在下一个循环中选择另一个。 有没有办法使用集合的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 
} 

回答

2

如果你不得不使用一个集合(而不是像建议地图),为什么你就不能重复一次,保存最“有为”例如一些参考地址:

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()); 
} 
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 
} 

不要忘了覆盖以适当的方式方法equalsTypeAddresshashCode

+0

我想重用代码的人从我使用过的项目中,我非常喜欢Google地图,我会在这种情况下检查是否可以在不崩溃的情况下将其切换为地图整个项目 – pringlesinn 2011-01-07 15:28:52

+1

只有在此地图中只有一个给定类型的情况下才有效。否则,按键上会出现冲突,您将无法获得您想要收集的数据。 – dflems 2011-01-07 15:33:58

0

甚至包含内部完成的循环逻辑,使用地图,而不是

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; 
    } 
} 
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); 
0
//I found an example in a book: 
// e.g. 
Shape shape; 
if (shape instanceof Circle) { 
//check if there is any class object Circle in 
// the collection shape 
// take some action 
} 
相关问题