Рубрики
Без рубрики

Преобразование итераций в коллекцию в Java

Узнайте, как преобразовать итерацию в коллекцию с помощью основного решения Java или других библиотек

Автор оригинала: baeldung.

1. Обзор

В этом уроке мы рассмотрим различные способы преобразования итерируемого в Коллекцию в Java .

Мы начнем с простых решений Java, а затем рассмотрим варианты, которые также предоставляют библиотеки Guava и Apache Commons.

2. Итерируемый и итератор

Во-первых, мы определим наш Итеративный :

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

Мы также определим простой Итератор – чтобы выделить разницу между преобразованием Итерируемый в Коллекцию и Итератор в Коллекцию :

Iterator iterator = iterable.iterator();

3. Использование простой Java

3.1. Повторяемость для сбора

Мы можем использовать метод Java 8 forEach() для добавления всех элементов в Список :

@Test
public void whenConvertIterableToListUsingJava8_thenSuccess() {
    List result = new ArrayList();
    iterable.forEach(result::add);

    assertThat(result, contains("john", "tom", "jane"));
}

Или используйте класс Spliterator для преобразования нашего Итерируемого в Поток , а затем в Коллекцию :

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

3.2. Итератор для сбора

С другой стороны, вместо использования forEach () мы будем использовать forEachRemaining() с Итератором :

@Test
public void whenConvertIteratorToListUsingJava8_thenSuccess() {
    List result = new ArrayList();
    iterator.forEachRemaining(result::add);

    assertThat(result, contains("john", "tom", "jane"));
}

Мы также можем создать Разделитель из нашего Итератора , а затем использовать его для преобразования Итератора в Поток :

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

3.3. Использование цикла For

Давайте также рассмотрим решение, которое использует очень простой цикл for для преобразования нашего Итеративного в Список :

@Test
public void whenConvertIterableToListUsingJava_thenSuccess() {
    List result = new ArrayList();
    for (String str : iterable) {
        result.add(str);
    }

    assertThat(result, contains("john", "tom", "jane"));
}

С другой стороны, мы будем использовать hasNext() и next() с Итератором :

@Test
public void whenConvertIteratorToListUsingJava_thenSuccess() {
    List result = new ArrayList();
    while (iterator.hasNext()) {
        result.add(iterator.next());
    }

    assertThat(result, contains("john", "tom", "jane"));
}

4. Использование гуавы

Есть также несколько доступных библиотек, которые предоставляют удобные методы, чтобы помочь нам достичь этого.

Давайте посмотрим, как мы можем использовать Guava для преобразования из Итеративного в Список :

Мы можем создать новую Список от Итерируемый или Итератор с помощью Списки.newArrayList() :

List result = Lists.newArrayList(iterable);

Или мы можем использовать ImmutableList.copyOf() :

List result = ImmutableList.copyOf(iterable);

5. Использование Apache Commons

Наконец, мы будем использовать Apache Commons IterableUtils для создания Списка из Итерируемый :

List result = IterableUtils.toList(iterable);

Аналогично, мы будем использовать IteratorUtils для создания Списка из нашего Итератора :

List result = IteratorUtils.toList(iterator);

6. Заключение

В этой короткой статье мы узнали, как преобразовать Iterable и Iterator в Collection с помощью Java. Мы исследовали различные способы использования простой Java и двух внешних библиотек: Guava и Apache Commons.

Как всегда, полный исходный код доступен на GitHub .