🧠 В Java 16+ появился метод
Stream.toList(), который собирает элементы потока в список. Раньше мы писали:
List<String> list = stream.collect(Collectors.toList());
Теперь можно укоротить до:
List<String> list = stream.toList();
💡 Главные отличия:
1️⃣ Неизменяемость
toList() возвращает unmodifiable List — любые add()/remove() вылетят UnsupportedOperationException.Если нужен изменяемый список, продолжайте использовать
collect(Collectors.toList()) или
stream.collect(Collectors.toCollection(ArrayList::new));
2️⃣ Null-элементы
toList() не допускает null и бросит NPE при встрече null в потоке. Collectors.toList() сохранит null без ошибок.3️⃣ Спецификация
Stream.toList() гарантированно создаёт новый список с точным размером, а Collectors.toList() лишь «может» вернуть любой List (часто ArrayList, но без чётких гарантий).⚠️ Если вам важна мутабельность или поддержка null — не меняйте на
toList().✅ Если же нужен чистый readonly-список и вы уверены в отсутствии
null — смело переходите на toList() для более лаконичного и потенциально более эффективного кода.Я перехожу на
toList() везде, где нужен только чтение — получилось короче и понятнее.👉@BookJava
