TGViewer
Java Ready | Программирование Java Ready | Программирование @java_ready · 9.25K subscribers
Post #2235 421
Почему после Stream.toList() нельзя добавить элемент?

При работе со Stream часто нужно собрать результаты обратно в список. Короткая запись выглядит естественно:
var names = Stream.of("Ana", "Bob").toList();


Но у Stream.toList() есть важное свойство, он возвращает немодифицируемый список. Такой код не добавит третье имя:
names.add("Cyd");


Вместо изменения списка программа получит UnsupportedOperationException. То же произойдёт при remove или set.

Если нужен готовый результат только для чтения, это как раз удобно:
List<String> labels = users.stream()
.map(User::name)
.toList();


Вызывающий код не сможет случайно поменять состав labels. При этом сами элементы могут оставаться изменяемыми, не модифицируемость списка не делает глубоко неизменяемыми объекты внутри него.

Если список нужно дополнять после сбора, задайте изменяемую коллекцию явно:
var names = Stream.of("Ana", "Bob")
.collect(Collectors.toCollection(ArrayList::new));


Теперь add и remove доступны. Есть и вариант обернуть готовый результат:
var names = new ArrayList<>(stream.toList());


Выбирайте способ сбора по тому, что будет происходить со списком дальше. Для чтения подойдёт toList(), для дальнейших изменений лучше явно создать ArrayList.

👉 Java Ready | #совет
  • ❤ 5
  • 👍 4
  • 🔥 3
More from @java_ready
  1. Oct 5, 2026Как оплачивать зарубежные сервисы в 2026 году? Можно бегать между посредниками и бояться б…
  2. Oct 5, 2026Находим три самых популярных товара! Есть поток покупок с повторяющимися названиями. Постр…
  3. Oct 2, 2026photo post
  4. Oct 1, 2026Следим за появлением файлов в папке через WatchService! Создадим наблюдатель и зарегистрир…
  5. Oct 1, 2026Шпаргалка по sealed-иерархиям в Java! На картинке показано, как sealed-класс ограничивает…
  6. Sep 30, 2026Почему kubectl apply ещё не означает, что приложение заработало? Во время деплоя часто зап…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →