2013-06-12 97 views
4

仿製藥我有以下類型的集合:過濾收集在Java

Collection<GenericMessage<Collection<Client>>>; 

Collection<GenericMessage<Client>>; 

Collection<GenericMessage<SearchResponse<Client>>>; 

Collection<Client> filteredClients

我得到一個對象:

Collection<GenericMessage<?>> resObject = (Collection<GenericMessage<?>>) response.getEntity(); 

我需要從響應對象,這可能是上述集合類型之一,即不會出現在filteredClients客戶端進行過濾。

有沒有乾淨的方法來做到這一點?

GenericMessage看起來是這樣的:

public class GenericMessage<T> { 
    T object; 

    public T getObject(){ 
    return object; 
    } 
    public void setObject(T object){ 
    this.object = object; 
    } 
} 

客戶看起來是這樣的:

public class Client extends Base 

SearchResponse看起來是這樣的:

public class SearchResponse<T> extends Base{ 
    List<T> results; 

    public List<T> getResults() { 
     return results; 
    } 

    public void setResults(List<T> results) { 
     this.results = results; 
    } 
} 

回答

2
if (!resObject.isEmpty()){ 
     GenericMessage<?> firstMessage = resObject.iterator().next(); 
     Object first = firstMessage.getObject(); 
     if (first instanceof Client){ 
     // do Client stuff 
     }else if (first instanceof SearchResponse){ 
     // do SearchResponse 
     }else if (first instanceof Collection){ 
     // blah 
     }else{ 
     // error? 
     } 
} 
+0

海事組織,resObject在心裏總是'GenericMessage',有什麼'GenericMessage'內能不同,並且基於'resObject'需要被轉移到提到的集合之一,然後需要被過濾。 –

+0

好的。謝謝。 –

+0

我用你的解決方案,我想在一開始就實施。我希望有一個捷徑。 – Dejell

0

什麼John B wrote或加入類類型參數傳遞給GenericMessage類。

喜歡的東西:

GenericMessage(Class<?> type) { 
    this.type= type; 
} 

public Class<?> getType() { 
    return type; 
} 

,後來,你可以在這個值過濾:

if (getType().equals(Client.class)) { 
    ... //do whatevs 
} else if ...