Почему removeif () недоступно в потоках коллекции - PullRequest
0 голосов
/ 20 июня 2019

Я вижу removeif() на ArrayList, но когда я делаю stream(), это невозможно.Это связано с тем, что removeif() изменяет размер коллекции, а потоку необходим фиксированный размер для работы?

Ответы [ 2 ]

2 голосов
/ 20 июня 2019

для удаления элемента из потока вы можете использовать Stream::filter.Пример:

.filter(e -> e.getId() == 4)

Это потому, что removeif() для изменения размера коллекции требуется поток фиксированного размера для работы?

Нет, фактически поток можетдаже работать с бесконечным количеством объектов

0 голосов
/ 20 июня 2019

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

...