Что такое интерфейс Sequence в Java?

«Что такое интерфейс Sequence в Java?» — вопрос из категории Базы данных, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Sequence — это новый интерфейс в Java, представляющий упорядоченную, возможно ленивую, последовательность элементов. Он был представлен в Java 21 (JEP 431) как часть Project Amber для более декларативной и эффективной обработки данных.

Основные характеристики:

  • Ленивые вычисления: Элементы вычисляются по мере необходимости (как в Stream), что может повысить производительность.
  • Иммутабельность: Исходная последовательность не изменяется операциями.
  • Богатый API: Поддерживает знакомые промежуточные (map, filter, flatMap, takeWhile) и терминальные (forEach, toList, reduce) операции.
  • Поддержка null: В отличие от Stream, может содержать null значения.
  • Возможность переиспользования: Последовательность можно обходить несколько раз (в отличие от одноразового Stream).

Пример создания и использования:

import java.util.*;
import java.util.stream.Gatherers;

// Создание Sequence
Sequence<String> seq = Sequence.of("Java", "Python", null, "Go", "Java");

// Цепочка операций
List<String> result = seq
    .filter(Objects::nonNull)       // Отфильтровать null
    .map(String::toUpperCase)       // Преобразовать
    .distinct()                     // Убрать дубликаты
    .toList();                      // Собрать в список

System.out.println(result); // [JAVA, PYTHON, GO]
Сравнение Sequence vs Stream: Критерий java.util.stream.Stream java.util.Sequence
Переиспользование Одноразовый (выбрасывает IllegalStateException при повторном использовании). Многоразовый.
null элементы Не поддерживает (может вызвать NullPointerException). Поддерживает.
Источник данных Коллекции, массивы, генераторы, I/O каналы. Те же источники, плюс другие Sequence.
Параллелизм Явная поддержка через parallel() и parallelStream(). В текущей реализации фокусируется на последовательных операциях.