Potrei usare new List(Collection2.filter())
ovviamente, ma in questo modo non è garantito che il mio ordine rimanga lo stesso.
Questo non è vero. Collections2.filter()
è una funzione pigramente valutata: in realtà non filtra la tua raccolta finché non inizi ad accedere alla versione filtrata. Ad esempio, se iterate sulla versione filtrata, gli elementi filtrati appariranno dall'iteratore nello stesso ordine della vostra raccolta originale (meno quelli filtrati, ovviamente).
Forse stavi pensando che fa il filtraggio in primo piano, quindi scarica i risultati in una Raccolta arbitraria e non ordinata di qualche forma - non è così.
Quindi, se utilizzi l'output di Collections2.filter()
come input per un nuovo elenco, l'ordine originale verrà mantenuto.
Usando le importazioni statiche (e la Lists.newArrayList
funzione), diventa abbastanza succinto:
List filteredList = newArrayList(filter(originalList, predicate));
Nota che, mentre Collections2.filter
non sarà avidamente iterate sulla raccolta sottostante, Lists.newArrayList
sarà - sarà estrarre tutti gli elementi della collezione filtrato e copiarli in un nuovo ArrayList
.