new List(Collection2.filter())
Claro que eu poderia usar , mas dessa forma não é garantido que meu pedido permaneça o mesmo.
Isso não é verdade. Collections2.filter()
é uma função avaliada vagarosamente - ela não filtra realmente sua coleção até que você comece a acessar a versão filtrada. Por exemplo, se você iterar sobre a versão filtrada, os elementos filtrados sairão do iterador na mesma ordem que sua coleção original (menos os filtrados, obviamente).
Talvez você estivesse pensando que ele faz a filtragem antecipadamente e, em seguida, despeja os resultados em uma coleção arbitrária e não ordenada de alguma forma - não faz.
Portanto, se você usar a saída de Collections2.filter()
como entrada para uma nova lista, seu pedido original será mantido.
Usando importações estáticas (e a Lists.newArrayList
função), torna-se bastante sucinto:
List filteredList = newArrayList(filter(originalList, predicate));
Observe que, embora Collections2.filter
não vá iterar avidamente sobre a coleção subjacente, Lists.newArrayList
irá - ele irá extrair todos os elementos da coleção filtrada e copiá-los em uma nova ArrayList
.