Ответ
Метод sequential() преобразует параллельный стрим в последовательный. По умолчанию стримы уже последовательные, поэтому метод нужен только для явного переключения режима после вызова parallel().
Пример использования
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
// Создаём параллельный стрим, затем явно делаем последовательным
Stream<Integer> stream = numbers.stream()
.parallel() // Включает параллельную обработку
.map(n -> n * 2) // Операция выполняется параллельно
.sequential() // Возвращает последовательный режим
.filter(n -> n > 5); // Дальнейшая обработка — последовательная
System.out.println("Is parallel? " + stream.isParallel()); // false
Важные особенности
- Последний вызов определяет режим:
stream.parallel().sequential().parallel()— результат будет параллельным. - Производительность: Переключение режима добавляет небольшие накладные расходы.
- Типичный use-case:
// Если нужно временно использовать параллельную обработку long count = data.stream() .parallel() // Параллельная фильтрация .filter(this::heavyPredicate) .sequential() // Возврат к последовательному режиму .map(this::complexMapping) .count(); - Альтернатива: Чаще используют отдельные стримы для разных режимов вместо переключения.
Рекомендация: Используйте parallel() только для CPU-интенсивных операций над большими наборами данных, когда профилирование подтверждает выигрыш в производительности.