Функциональные интерфейсы и Stream API

Карта раздела:

List<String> ids = orders.stream()
        .filter(Order::isPaid)
        .map(Order::id)
        .distinct()
        .toList();

До toList() промежуточные операции только описывают вычисление. Терминальная операция запускает обход; один stream нельзя использовать повторно.

Быстрая проверка

Функциональный интерфейс обязан иметь один метод вообще? Один abstract-метод; default/static и методы Object не мешают.

Гарантирует ли stream параллельность? Нет, обычный stream последовательный, а parallel() — лишь выбор режима pipeline.

Почему side effect в map опасен? Порядок, число и поток вызовов зависят от pipeline и реализации.