Menukar Iterator ke Senarai

1. Gambaran keseluruhan

Dalam tutorial ringkas ini, kita akan belajar bagaimana menukar Iterator ke Daftar di Java. Kami akan merangkumi beberapa contoh menggunakan loop sementara, 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 Loop Sementara

Mari kita mulakan dengan pendekatan yang digunakan secara tradisional sebelum Java 8. Kami akan menukar Pelelar kepada Senarai menggunakan satu manakala gelung :

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 boleh menggunakan Pelelar 's forEachRemaining () kaedah untuk membina kami List . Kami akan lulus add () kaedah yang List muka sebagai rujukan kaedah:

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

4. Menggunakan Java 8 Streams API

Seterusnya, kami akan menggunakan Java 8 Streams API untuk menukar Iterator ke Daftar . Untuk menggunakan Stream API, kita perlu menukar Iterator terlebih dahulu menjadi Iterable . Kita dapat melakukan ini dengan menggunakan ungkapan Java 8 Lambda:

Iterable iterable = () -> iterator; 

Sekarang, kita boleh menggunakan StreamSupport kelas ' aliran () dan mengumpul () kaedah untuk membina Senarai :

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

5. Menggunakan Jambu Batu

The Guava perpustakaan dari Google menyediakan pilihan untuk membuat kedua-dua yg mungkin berubah dan tidak berubah Senarai s , jadi kita akan melihat kedua-dua pendekatan.

Mari kita buat Senarai yang tidak berubah menggunakan kaedah ImmutableList.copyOf () :

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

Sekarang, mari buat Senarai yang boleh diubah menggunakan kaedah Lists.newArrayList () :

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

6. Menggunakan Apache Commons

The perpustakaan Apache Commons Collections menyediakan pilihan untuk bekerja pada Senarai. Kami akan menggunakan IteratorUtils untuk melakukan penukaran:

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

7. Kesimpulannya

Dalam artikel ini, kami telah membahas beberapa pilihan untuk menukar Iterator ke Daftar . Walaupun ada beberapa cara lain untuk mencapainya, kami telah membahas beberapa pilihan yang biasa digunakan.

Pelaksanaan semua contoh dan coretan kod ini boleh didapati di GitHub.