Mengingat yang kita miliki, Set<String> stringSet
kita dapat menggunakan yang berikut:
Java 10 (daftar tidak dapat diverifikasi)
List<String> strList = stringSet.stream().collect(Collectors.toUnmodifiableList());
Java 8 (Daftar yang Dapat Diubah)
import static java.util.stream.Collectors.*;
List<String> stringList1 = stringSet.stream().collect(toList());
Sesuai dokumen untuk metode initoList()
Tidak ada jaminan pada jenis, mutabilitas, serializability, atau keamanan thread dari Daftar yang dikembalikan; jika kontrol lebih besar atas Daftar yang dikembalikan diperlukan, gunakan toCollection (Pemasok).
Jadi jika kita membutuhkan implementasi spesifik misalnya ArrayList
kita bisa mendapatkannya dengan cara ini:
List<String> stringList2 = stringSet.stream().
collect(toCollection(ArrayList::new));
Java 8 (Daftar Tidak Diubah)
Kita dapat menggunakan Collections::unmodifiableList
metode dan membungkus daftar yang dikembalikan pada contoh sebelumnya. Kami juga dapat menulis metode khusus kami sebagai:
class ImmutableCollector {
public static <T> Collector<T, List<T>, List<T>> toImmutableList(Supplier<List<T>> supplier) {
return Collector.of( supplier, List::add, (left, right) -> {
left.addAll(right);
return left;
}, Collections::unmodifiableList);
}
}
Dan kemudian menggunakannya sebagai:
List<String> stringList3 = stringSet.stream()
.collect(ImmutableCollector.toImmutableList(ArrayList::new));
Kemungkinan lain adalah menggunakan collectingAndThen
metode yang memungkinkan beberapa transformasi akhir dilakukan sebelum mengembalikan hasil:
List<String> stringList4 = stringSet.stream().collect(collectingAndThen(
toCollection(ArrayList::new),Collections::unmodifiableList));
Satu hal yang perlu diperhatikan adalah bahwa metode ini Collections::unmodifiableList
mengembalikan tampilan daftar yang ditentukan yang tidak dapat dimodifikasi, sesuai dok . Koleksi tampilan yang tidak dapat dimodifikasi adalah koleksi yang tidak dapat dimodifikasi dan juga merupakan tampilan ke koleksi dukungan. Perhatikan bahwa perubahan pada koleksi dukungan mungkin masih dimungkinkan, dan jika terjadi, mereka dapat dilihat melalui tampilan yang tidak dapat dimodifikasi. Tetapi metode kolektor Collectors.unmodifiableList
mengembalikan daftar yang benar-benar tidak dapat diubah di Java 10 .
java.util.Collection
: O (0)