Ответ
Да, операция sorted() является stateful intermediate операцией. Она должна накопить все элементы потока в промежуточный буфер перед выполнением сортировки, что требует хранения состояния.
Пример:
List<Integer> numbers = Arrays.asList(3, 1, 4, 2);
List<Integer> sortedList = numbers.stream()
.sorted() // Stateful: буферизует все элементы
.collect(Collectors.toList());
// Результат: [1, 2, 3, 4]
Почему это важно:
- Stateful операции (
sorted(),distinct()) могут требовать больше памяти и не подходят для бесконечных потоков. - Stateless операции (
map(),filter()) обрабатывают элементы независимо и более эффективны для параллельного выполнения.
Исключение: Если источник данных уже отсортирован (например, TreeSet), некоторые реализации могут оптимизировать sorted(), но формально операция остаётся stateful.