Saya dapat menggunakan new List(Collection2.filter())tentu saja, tetapi dengan cara ini tidak ada jaminan bahwa pemesanan saya tetap sama.
Ini tidak benar. Collections2.filter()adalah fungsi yang dievaluasi dengan lambat - fungsi ini tidak benar-benar memfilter koleksi Anda sampai Anda mulai mengakses versi yang difilter. Misalnya, jika Anda mengulang versi yang difilter, elemen yang difilter akan keluar dari iterator dengan urutan yang sama seperti koleksi asli Anda (kecuali yang difilter, tentunya).
Mungkin Anda berpikir bahwa ia melakukan pemfilteran di depan, lalu membuang hasilnya ke dalam bentuk Koleksi yang sewenang-wenang dan tidak berurutan - ternyata tidak.
Jadi jika Anda menggunakan keluaran dari Collections2.filter()sebagai masukan ke daftar baru, maka pesanan asli Anda akan dipertahankan.
Menggunakan impor statis (dan Lists.newArrayListfungsinya), ini menjadi cukup singkat:
List filteredList = newArrayList(filter(originalList, predicate));
Perhatikan bahwa sementara Collections2.filtertidak akan bersemangat mengulang koleksi yang mendasarinya, Lists.newArrayList akan - itu akan mengekstrak semua elemen dari koleksi yang difilter dan menyalinnya ke yang baru ArrayList.