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

Преобразование итератора в список

Изучите различные методы преобразования итератора в список в Java.

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

1. Обзор

В этом коротком уроке мы узнаем, как преобразовать Итератор | в Список | в Java. Мы рассмотрим несколько примеров с использованием цикла while, Java 8 и нескольких общих библиотек.

Мы будем использовать Итератор с Целым числом s для всех наших примеров:

Iterator iterator = Arrays.asList(1, 2, 3).iterator();

2. Использование цикла While

Давайте начнем с подхода, традиционно использовавшегося до Java 8. Мы преобразуем Итератор в Список используя |/a while loop :

List actualList = new ArrayList();
while (iterator.hasNext()) {
    actualList.add(iterator.next());
}

assertThat(actualList, containsInAnyOrder(1, 2, 3));

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

В Java 8 и более поздних версиях мы можем использовать метод Iterator ‘s forEachRemaining() для построения вашего списка . Мы передадим метод add() интерфейса List в качестве ссылки на метод :

List actualList = new ArrayList();
iterator.forEachRemaining(actualList::add);

assertThat(actualList, containsInAnyOrder(1, 2, 3));

4. Использование Java 8 Streams API

Далее мы будем использовать Java 8 Streams API для преобразования Итератора в Список . Чтобы использовать Stream API, нам нужно сначала преобразовать Iterator в Iterable . Мы можем сделать это с помощью лямбда-выражений Java 8:

Iterable iterable = () -> iterator;

Теперь мы можем использовать Stream Support class’ stream() и collect() методы для построения списка :

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

assertThat(actualList, containsInAnyOrder(1, 2, 3));

5. Использование Гуавы

Библиотека Guava от Google предоставляет опции для создания как изменяемого, так и неизменяемого списка s , поэтому мы увидим оба подхода.

Давайте сначала создадим неизменяемый Список с помощью метода ImmutableList.copyOf() :

List actualList = ImmutableList.copyOf(iterator);

assertThat(actualList, containsInAnyOrder(1, 2, 3));

Теперь давайте создадим изменяемый Список с помощью метода Lists.newArrayList() :

List actualList = Lists.newArrayList(iterator);

assertThat(actualList, containsInAnyOrder(1, 2, 3));

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

Библиотека Apache Commons Collections предоставляет опции для работы со списком . Мы будем использовать IteratorUtils для выполнения преобразования:

List actualList = IteratorUtils.toList(iterator);

assertThat(actualList, containsInAnyOrder(1, 2, 3));

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

В этой статье мы рассмотрели несколько вариантов преобразования Итератора в Список . Хотя есть несколько других способов достижения этой цели, мы рассмотрели несколько часто используемых вариантов.

Реализацию всех этих примеров и фрагментов кода можно найти на GitHub .