Pretvaranje Iterable u zbirku na Javi
1. Pregled
U ovom vodiču, istražit ćemo različite načine pretvorbe Iterativ do a Kolekcija na Javi.
Započet ćemo s običnim Java rješenjima, a zatim ćemo pogledati opcije koje knjižnice Guava i Apache Commons također nude.
2. Iterativ i Iterator
Prvo ćemo definirati naš Iterativ:
Iterable iterable = Arrays.asList ("john", "tom", "jane");
Također ćemo definirati jednostavan Iterator - da istakne razliku između pretvaranja Iterativ do Kolekcija i Iterator do Kolekcija:
Iterator iterator = iterable.iterator ();
3. Korištenje obične Jave
3.1. Iterativ do Kolekcija
Možemo koristite Java 8 za svakoga() metoda za dodavanje svih elemenata u Popis:
@Test public void whenConvertIterableToListUsingJava8_thenSuccess () {Rezultat popisa = novi ArrayList (); iterable.forEach (rezultat :: dodaj); assertThat (rezultat, sadrži ("john", "tom", "jane")); }
Ili koristiti Spliterator razred pretvoriti naš Iterativ do Stream zatim da Kolekcija:
Rezultat popisa = StreamSupport.stream (iterable.spliterator (), false) .collect (Collectors.toList ());
3.2. Iterator do Kolekcija
S druge strane, umjesto da se koristi za svakoga(), koristit ćemo forEachRemaining () s Iterator:
@Test public void whenConvertIteratorToListUsingJava8_thenSuccess () {Rezultat popisa = novi ArrayList (); iterator.forEachRemaining (rezultat :: dodaj); assertThat (rezultat, sadrži ("john", "tom", "jane")); }
Također možemo stvoriti i Spliterator od našeg Iterator zatim ga upotrijebite za pretvorbu Iterator do Stream:
Rezultat popisa = StreamSupport.stream (Spliterators.spliteratorUnknownSize (iterator, Spliterator.ORDERED), false) .collect (Collectors.toList ());
3.3. Korištenje for-Loop
Pogledajmo i rješenje koje koristi vrlo jednostavnu for-petlju za pretvaranje našeg Iterativ do a Popis:
@Test public void whenConvertIterableToListUsingJava_thenSuccess () {Rezultat popisa = novi ArrayList (); for (String str: iterable) {result.add (str); } assertThat (rezultat, sadrži ("john", "tom", "jane")); }
S druge strane, koristit ćemo hasNext () i Sljedeći() s Iterator:
@Test public void whenConvertIteratorToListUsingJava_thenSuccess () {Rezultat popisa = novi ArrayList (); while (iterator.hasNext ()) {result.add (iterator.next ()); } assertThat (rezultat, sadrži ("john", "tom", "jane")); }
4. Korištenje Guave
Dostupno je i nekoliko knjižnica koje nude prikladne metode koje će nam pomoći da to postignemo.
Pogledajmo kako možemo koristiti Guavu za pretvorbu iz Iterativ do a Popis:
Možemo stvoriti novo Popis iz Iterativ ili Iterator koristeći Lists.newArrayList ():
Rezultat popisa = Lists.newArrayList (iterable);
Ili možemo koristiti ImmutableList.copyOf ():
Rezultat popisa = ImmutableList.copyOf (iterable);
5. Korištenje Apache Commons
Konačno, koristit ćemo Apache Commons IterableUtils stvoriti a Popis iz Iterativ:
Rezultat popisa = IterableUtils.toList (iterable);
Slično ćemo koristiti IteratorUtils stvoriti a Popis od našeg Iterator:
Rezultat popisa = IteratorUtils.toList (iterator);
6. Zaključak
U ovom kratkom članku naučili smo kako pretvoriti Iterativ i Iterator do a Kolekcija koristeći Javu. Istražili smo različite načine koristeći običnu Javu i dvije vanjske knjižnice: Guava i Apache Commons.
Kao i uvijek, puni izvorni kod dostupan je na GitHub-u.