Авторский канал по разработке на Java.
Ресурсы, гайды, задачи, шпаргалки.
Информация ежедневно пополняется!
Cотрудничество: @energy_c
Post #2093
1.29K

Почему Stream.toList() может сломать старый код?
В Java часто собирают stream в список:
Выглядит почти так же, как старый вариант через Collectors:
Но есть важное отличие.
Stream.toList() возвращает неизменяемый список:
Если список нужен только для чтения, это даже плюс:
Так код явно показывает, что результат не должен случайно меняться после сборки.
Но если дальше список нужно дополнять, лучше создать изменяемую коллекцию явно:
Или сделать копию:
👉 Java Ready | #совет
В Java часто собирают stream в список:
List<String> names = users.stream()
.map(User::name)
.toList();
Выглядит почти так же, как старый вариант через Collectors:
List<String> names = users.stream()
.map(User::name)
.collect(Collectors.toList());
Но есть важное отличие.
Stream.toList() возвращает неизменяемый список:
List<String> names = users.stream()
.map(User::name)
.toList();
names.add("admin"); // UnsupportedOperationException
Если список нужен только для чтения, это даже плюс:
return users.stream()
.filter(User::active)
.map(User::name)
.toList();
Так код явно показывает, что результат не должен случайно меняться после сборки.
Но если дальше список нужно дополнять, лучше создать изменяемую коллекцию явно:
List<String> names = users.stream()
.map(User::name)
.collect(Collectors.toCollection(ArrayList::new));
Или сделать копию:
List<String> names = new ArrayList<>(
users.stream().map(User::name).toList()
);
👉 Java Ready | #совет
- ❤ 8
- 👍 4
- 🔥 3

















