Ho una collezione con due tipi di oggetto. Voglio solo leggere uno dei due tipi in un nuovo Set. C'è un modo elegante per farlo?Come leggere solo oggetti specifici di un tipo da una raccolta con più tipi di oggetto
6
A
risposta
5
Usa Google Guava.
Collections2.filter(yourOriginalCollection, new Predicate<Object>() {
public boolean apply(Object obj) {
return obj instanceof TypeYouAreInterestedIn;
}
});
O in Java 8:
Collections2.filter(yourOriginalCollection, (obj) -> obj instanceof TypeYouAreInterestedIn);
+0
@ M156 grazie per il filtro Java 8 –
+1
Nessun problema, penso che queste espressioni lambda siano una funzionalità così interessante che è arrivata finalmente a Java 8, quindi dobbiamo diffondere la parola: D – M156
1
come Suresh ha detto non c'è è costruito in termini di funzionalità, qui una sorta di codice completo: filtro di
for(Object obj : yourOldCollection) {
if(obj instanceof SearchedType){
yourNewSet.add(obj);
}
}
si potrebbe avvolgere quella mappa in un'altra mappa 'Map>' e separare gli oggetti da theyr classe actuall. –
SomeJavaGuy
È possibile utilizzare org.apache.commons.collections4.Predicate la classe per gestire in modo elegante. –