1. Обзор
В этом коротком уроке мы узнаем, как преобразовать Итератор | в Список | в Java. Мы рассмотрим несколько примеров с использованием цикла while, Java 8 и нескольких общих библиотек.
Мы будем использовать Итератор с Целым числом s для всех наших примеров:
Iteratoriterator = Arrays.asList(1, 2, 3).iterator();
2. Использование цикла While
Давайте начнем с подхода, традиционно использовавшегося до Java 8. Мы преобразуем Итератор в Список используя |/a while loop :
ListactualList = 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 в качестве ссылки на метод :
ListactualList = 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:
Iterableiterable = () -> iterator;
Теперь мы можем использовать Stream Support class’ stream() и collect() методы для построения списка :
ListactualList = StreamSupport .stream(iterable.spliterator(), false) .collect(Collectors.toList()); assertThat(actualList, containsInAnyOrder(1, 2, 3));
5. Использование Гуавы
Библиотека Guava от Google предоставляет опции для создания как изменяемого, так и неизменяемого списка s , поэтому мы увидим оба подхода.
Давайте сначала создадим неизменяемый Список с помощью метода ImmutableList.copyOf() :
ListactualList = ImmutableList.copyOf(iterator); assertThat(actualList, containsInAnyOrder(1, 2, 3));
Теперь давайте создадим изменяемый Список с помощью метода Lists.newArrayList() :
ListactualList = Lists.newArrayList(iterator); assertThat(actualList, containsInAnyOrder(1, 2, 3));
6. Использование Apache Commons
Библиотека Apache Commons Collections предоставляет опции для работы со списком . Мы будем использовать IteratorUtils для выполнения преобразования:
ListactualList = IteratorUtils.toList(iterator); assertThat(actualList, containsInAnyOrder(1, 2, 3));
7. Заключение
В этой статье мы рассмотрели несколько вариантов преобразования Итератора в Список . Хотя есть несколько других способов достижения этой цели, мы рассмотрели несколько часто используемых вариантов.
Реализацию всех этих примеров и фрагментов кода можно найти на GitHub .