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.newArrayList
işlevi) kullanarak, oldukça kısa ve öz hale gelir:
List filteredList = newArrayList(filter(originalList, predicate));
Ederken o Not Collections2.filter
hevesle yinelerler yatan koleksiyonu üzerinde, olmaz Lists.newArrayList
olur o süzülmüş koleksiyonun elemanları elde edecek ve onları yeni kopyalamak - ArrayList
.