Collections Средний

Сбор напрямую в немодифицируемый список с помощью stream.toList().

✕ Java 8
List<String> list = stream.collect(
    Collectors.collectingAndThen(
        Collectors.toList(),
        Collections::unmodifiableList
    )
);
✓ Java 16+
List<String> list = stream.toList();
Заметили проблему в этом коде? Сообщите нам.
📏

Максимально краткий

stream.toList() не требует ни collect(), ни импорта Collectors.

🔒

Неизменяемый

Результат нельзя изменить — никаких случайных мутаций.

📖

Читаемый

Читается естественно как завершающий шаг любого потокового конвейера.

Старый подход
collectingAndThen
Современный подход
stream.toList()
Начиная с JDK
16
Сложность
Средний
Немодифицируемые Collector-ы
Доступно

Широко доступно начиная с JDK 16 (март 2021)

Java 10 добавила toUnmodifiableList(), toUnmodifiableSet() и toUnmodifiableMap() для замены многословной обёртки collectingAndThen. Для списков stream.toList() из Java 16 предлагает ещё более простую альтернативу — без вызова collect(). Для других типов коллекций использовать toUnmodifiableSet() и toUnmodifiableMap().