new List(Collection2.filter())Elbette kullanabilirdim , ancak bu şekilde siparişimin aynı kalacağı garanti edilmez.
Bu doğru değil. Collections2.filter()tembel olarak değerlendirilen bir işlevdir - filtrelenmiş sürüme erişmeye başlayana kadar aslında koleksiyonunuzu filtrelemez. Örneğin, filtrelenmiş sürüm üzerinde yineleme yaparsanız, filtrelenen öğeler yineleyiciden orijinal koleksiyonunuzla aynı sırada çıkacaktır (tabii ki filtrelenenler hariç).
Belki de filtrelemeyi önceden yaptığını, sonra sonuçları rastgele, sırasız bir şekilde bir koleksiyona döktüğünü düşünüyordunuz - öyle değil.
Eğer çıktısını kullanmak Yani eğer Collections2.filter()yeni bir listeye girdi olarak, sonra orijinal sipariş edecek korunacak.
Statik içe aktarımları (ve Lists.newArrayListişlevi) kullanarak, oldukça kısa ve öz hale gelir:
List filteredList = newArrayList(filter(originalList, predicate));
Ederken o Not Collections2.filterhevesle yinelerler yatan koleksiyonu üzerinde, olmaz Lists.newArrayList olur o süzülmüş koleksiyonun elemanları elde edecek ve onları yeni kopyalamak - ArrayList.