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.