Mengonversi Iterator ke Daftar

1. Ikhtisar

Dalam tutorial singkat ini, kita akan belajar cara mengubah Iterator menjadi List di Java. Kami akan membahas beberapa contoh menggunakan while loop, Java 8, dan beberapa perpustakaan umum.

Kami akan menggunakan Iterator dengan Integer untuk semua contoh kami:

Iterator iterator = Arrays.asList(1, 2, 3).iterator(); 

2. Menggunakan While Loop

Mari kita mulai dengan pendekatan tradisional digunakan sebelum Java 8. Kami akan mengkonversi Iterator ke Daftar menggunakan sebuah sementara lingkaran :

List actualList = new ArrayList(); while (iterator.hasNext()) { actualList.add(iterator.next()); } assertThat(actualList, containsInAnyOrder(1, 2, 3)); 

3. Menggunakan Java 8 Iterator.forEachRemaining

Di Jawa 8 dan kemudian, kita dapat menggunakan Iterator 's forEachRemaining () metode untuk membangun kami Daftar . Kami akan meneruskan metode add () dari antarmuka Daftar sebagai referensi metode:

List actualList = new ArrayList(); iterator.forEachRemaining(actualList::add); assertThat(actualList, containsInAnyOrder(1, 2, 3)); 

4. Menggunakan Java 8 Streams API

Selanjutnya, kita akan menggunakan Java 8 Streams API untuk mengonversi Iterator menjadi Daftar . Untuk menggunakan Stream API, pertama - tama kita harus mengonversi Iterator menjadi Iterable . Kita bisa melakukan ini menggunakan ekspresi Java 8 Lambda:

Iterable iterable = () -> iterator; 

Sekarang, kita dapat menggunakan metode stream () dan collect () kelas StreamSupport untuk membuat Daftar :

List actualList = StreamSupport .stream(iterable.spliterator(), false) .collect(Collectors.toList()); assertThat(actualList, containsInAnyOrder(1, 2, 3));

5. Menggunakan Jambu Biji

The Jambu perpustakaan dari Google menyediakan opsi untuk membuat kedua bisa berubah dan tidak berubah Daftar s , jadi kita akan melihat kedua pendekatan.

Mari pertama-tama buat Daftar yang tidak dapat diubah menggunakan metode ImmutableList.copyOf () :

List actualList = ImmutableList.copyOf(iterator); assertThat(actualList, containsInAnyOrder(1, 2, 3));

Sekarang, mari buat List yang bisa berubah menggunakan metode Lists.newArrayList () :

List actualList = Lists.newArrayList(iterator); assertThat(actualList, containsInAnyOrder(1, 2, 3));

6. Menggunakan Apache Commons

The Apache Commons Koleksi perpustakaan menyediakan opsi untuk bekerja pada Daftar. Kami akan menggunakan IteratorUtils untuk melakukan konversi:

List actualList = IteratorUtils.toList(iterator); assertThat(actualList, containsInAnyOrder(1, 2, 3));

7. Kesimpulan

Di artikel ini, kami telah membahas beberapa opsi untuk mengonversi Iterator ke Daftar . Meskipun ada beberapa cara lain untuk mencapai ini, kami telah membahas beberapa opsi yang umum digunakan.

Penerapan semua contoh dan cuplikan kode ini dapat ditemukan di GitHub.