TGViewer
Библиотека собеса по Java | вопросы с собеседований Библиотека собеса по Java | вопросы с собеседований @java_interview_lib · 6.44K subscribers
Post #1346 927
Расскажите о паттерне Iterator

Iterator — это поведенческий паттерн, который даёт возможность последовательно обходить элементы коллекции, не раскрывая её внутреннее устройство.

Простыми словами: вы проходите по элементам через «окошко» (hasNext / next), не зная — это массив, дерево или база данных за ним.

▪️ Пример:

Пагинация по результатам из БД: клиент обходит элементы как обычную коллекцию, а итератор незаметно подгружает следующую страницу.

class PaginatedIterator<T> implements Iterator<T> {
private final Function<Integer, List<T>> pageFetcher;
private final int pageSize;
private List<T> currentPage;
private int pageIndex = 0;
private int itemIndex = 0;

public PaginatedIterator(Function<Integer, List<T>> pageFetcher,
int pageSize) {
this.pageFetcher = pageFetcher;
this.pageSize = pageSize;
this.currentPage = pageFetcher.apply(0);
}

public boolean hasNext() {
if (itemIndex < currentPage.size()) return true;
if (currentPage.size() < pageSize) return false; // последняя страница

// Подгружаем следующую страницу
pageIndex++;
currentPage = pageFetcher.apply(pageIndex);
itemIndex = 0;
return !currentPage.isEmpty();
}

public T next() {
if (!hasNext()) throw new NoSuchElementException();
return currentPage.get(itemIndex++);
}
}

// Использование — клиент не знает про пагинацию
Iterator<User> users = new PaginatedIterator<>(
page -> userRepository.findAll(PageRequest.of(page, 50)).getContent(),
50
);

while (users.hasNext()) {
User user = users.next(); // подгрузка происходит автоматически
process(user);
}


▪️ Когда использовать

Нужен единый способ обхода для разных структур данных
Хотите скрыть сложность обхода (дерево, граф, пагинация)
В Java: все коллекции реализуют Iterable, что позволяет for-each

▪️ Минус

Для простых коллекций — избыточен; итератор может устареть при изменении коллекции (ConcurrentModificationException).

🐸 Библиотека собеса по Java

#patterns
  • 👍 5
  • ❤ 1
  • 🔥 1
More from @java_interview_lib
  1. Sep 15, 2026❓ Расскажите о паттерне Facade Facade — это структурный паттерн, который предоставляет про…
  2. Sep 15, 2026😭 Как не потратить недельный лимит AI-кодинга за три дня? Разберём на вебинаре, как трати…
  3. Aug 5, 2026❓ Что такое "diamond problem" и как его решает Java? «Diamond problem» возникает при множе…
  4. Aug 5, 2026👅 Самое сложное — выбрать не курс, а направление Сегодня хочется разобраться в AI-агентах…
  5. Aug 5, 2026Один доступ вместо вечного выбора между «нужно для работы» и «давно хотелось изучить» 👇
  6. Jul 31, 2026❓ Как работает ConcurrentHashMap? ConcurrentHashMap использует сегментирование / распростр…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →