1. Обзор
В этом уроке мы рассмотрим различные способы преобразования итерируемого в Коллекцию в Java .
Мы начнем с простых решений Java, а затем рассмотрим варианты, которые также предоставляют библиотеки Guava и Apache Commons.
2. Итерируемый и итератор
Во-первых, мы определим наш Итеративный :
Iterableiterable = Arrays.asList("john", "tom", "jane");
Мы также определим простой Итератор – чтобы выделить разницу между преобразованием Итерируемый в Коллекцию и Итератор в Коллекцию :
Iteratoriterator = iterable.iterator();
3. Использование простой Java
3.1. Повторяемость для сбора
Мы можем использовать метод Java 8 forEach() для добавления всех элементов в Список :
@Test public void whenConvertIterableToListUsingJava8_thenSuccess() { Listresult = new ArrayList (); iterable.forEach(result::add); assertThat(result, contains("john", "tom", "jane")); }
Или используйте класс Spliterator для преобразования нашего Итерируемого в Поток , а затем в Коллекцию :
Listresult = StreamSupport.stream(iterable.spliterator(), false) .collect(Collectors.toList());
3.2. Итератор для сбора
С другой стороны, вместо использования forEach () мы будем использовать forEachRemaining() с Итератором :
@Test public void whenConvertIteratorToListUsingJava8_thenSuccess() { Listresult = new ArrayList (); iterator.forEachRemaining(result::add); assertThat(result, contains("john", "tom", "jane")); }
Мы также можем создать Разделитель из нашего Итератора , а затем использовать его для преобразования Итератора в Поток :
Listresult = StreamSupport.stream(Spliterators.spliteratorUnknownSize(iterator, Spliterator.ORDERED), false) .collect(Collectors.toList());
3.3. Использование цикла For
Давайте также рассмотрим решение, которое использует очень простой цикл for для преобразования нашего Итеративного в Список :
@Test public void whenConvertIterableToListUsingJava_thenSuccess() { Listresult = new ArrayList (); for (String str : iterable) { result.add(str); } assertThat(result, contains("john", "tom", "jane")); }
С другой стороны, мы будем использовать hasNext() и next() с Итератором :
@Test public void whenConvertIteratorToListUsingJava_thenSuccess() { Listresult = new ArrayList (); while (iterator.hasNext()) { result.add(iterator.next()); } assertThat(result, contains("john", "tom", "jane")); }
4. Использование гуавы
Есть также несколько доступных библиотек, которые предоставляют удобные методы, чтобы помочь нам достичь этого.
Давайте посмотрим, как мы можем использовать Guava для преобразования из Итеративного в Список :
Мы можем создать новую Список от Итерируемый или Итератор с помощью Списки.newArrayList() :
Listresult = Lists.newArrayList(iterable);
Или мы можем использовать ImmutableList.copyOf() :
Listresult = ImmutableList.copyOf(iterable);
5. Использование Apache Commons
Наконец, мы будем использовать Apache Commons IterableUtils для создания Списка из Итерируемый :
Listresult = IterableUtils.toList(iterable);
Аналогично, мы будем использовать IteratorUtils для создания Списка из нашего Итератора :
Listresult = IteratorUtils.toList(iterator);
6. Заключение
В этой короткой статье мы узнали, как преобразовать Iterable и Iterator в Collection с помощью Java. Мы исследовали различные способы использования простой Java и двух внешних библиотек: Guava и Apache Commons.
Как всегда, полный исходный код доступен на GitHub .