Ответ
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(). |
В текущей реализации фокусируется на последовательных операциях. |