2011-01-07 248 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 
} 
相關問題