Menukar Iterable ke Koleksi di Java

1. Gambaran keseluruhan

Dalam tutorial ini, kita akan meneroka pelbagai cara untuk menukar Iterable menjadi Koleksi di Java .

Kami akan mulakan dengan penyelesaian Java biasa, kemudian melihat pilihan yang disediakan oleh perpustakaan Guava dan Apache Commons.

2. Iterable dan Iterator

Pertama, kami akan menentukan Iterable kami :

Iterable iterable = Arrays.asList("john", "tom", "jane");

Kami juga akan menentukan Iterator ringkas - untuk menonjolkan perbezaan antara menukar Iterable ke Koleksi dan Iterator ke Koleksi :

Iterator iterator = iterable.iterator();

3. Menggunakan Java Plain

3.1. Boleh Digunakan ke Koleksi

Kita boleh menggunakan kaedah Java 8 forEach () untuk menambahkan semua elemen ke dalam Senarai :

@Test public void whenConvertIterableToListUsingJava8_thenSuccess() { List result = new ArrayList(); iterable.forEach(result::add); assertThat(result, contains("john", "tom", "jane")); }

Atau gunakan kelas Spliterator untuk menukar Iterable ke Stream kemudian ke Koleksi :

List result = StreamSupport.stream(iterable.spliterator(), false) .collect(Collectors.toList());

3.2. Pengulangan ke Koleksi

Sebaliknya, daripada menggunakan forEach () , kami akan menggunakan forEachRemaining () dengan Iterator :

@Test public void whenConvertIteratorToListUsingJava8_thenSuccess() { List result = new ArrayList(); iterator.forEachRemaining(result::add); assertThat(result, contains("john", "tom", "jane")); }

Kami juga boleh membuat Spliterator dari Iterator kami kemudian menggunakannya untuk menukar Iterator ke Stream :

List result = StreamSupport.stream(Spliterators.spliteratorUnknownSize(iterator, Spliterator.ORDERED), false) .collect(Collectors.toList());

3.3. Menggunakan For-Loop

Mari kita lihat juga penyelesaian yang menggunakan gelung yang sangat mudah untuk menukar Iterable kami ke Senarai :

@Test public void whenConvertIterableToListUsingJava_thenSuccess() { List result = new ArrayList(); for (String str : iterable) { result.add(str); } assertThat(result, contains("john", "tom", "jane")); }

Sebaliknya, kami akan menggunakan hasNext () dan seterusnya () dengan Iterator :

@Test public void whenConvertIteratorToListUsingJava_thenSuccess() { List result = new ArrayList(); while (iterator.hasNext()) { result.add(iterator.next()); } assertThat(result, contains("john", "tom", "jane")); }

4. Menggunakan Jambu Batu

Terdapat juga beberapa perpustakaan yang menyediakan kaedah yang mudah untuk membantu kami mencapainya.

Mari lihat bagaimana kita dapat menggunakan Jambu biji untuk menukar dari Iterable ke Daftar :

Kita boleh membuat Senarai baru dari Iterable atau Iterator menggunakan Lists.newArrayList () :

List result = Lists.newArrayList(iterable);

Atau kita boleh menggunakan ImmutableList.copyOf () :

List result = ImmutableList.copyOf(iterable);

5. Menggunakan Apache Commons

Akhirnya, kami akan menggunakan Apache Commons IterableUtils untuk membuat Senarai dari Iterable :

List result = IterableUtils.toList(iterable);

Begitu juga, kami akan menggunakan IteratorUtils untuk membuat Senarai dari Iterator kami :

List result = IteratorUtils.toList(iterator);

6. Kesimpulannya

Dalam artikel pendek ini, kami belajar bagaimana mengubah Iterable dan Iterator ke Koleksi menggunakan Java. Kami meneroka pelbagai cara menggunakan Java biasa, dan dua perpustakaan luaran: Jambu Batu dan Apache Commons.

Seperti biasa, kod sumber penuh tersedia di GitHub.