Обычная задача с потоками Java состоит в том, чтобы очистить входные данные, чтобы последующие шаги могли работать, не слишком задумываясь. Вероятно, наиболее распространенным шагом очистки № 1 является удаление нулей из коллекции.
Потоки облегчают это:
myCollection.stream() .filter(Objects::nonNull) .do.what.you.need
Сравните с классическими подходами:
while(myCollection.remove(null)); // do what you need, but you better not need that original list, because it's gone... myCollection.removeAll(Collections.singleton(null)); // do what you need, but you better not need that original list, because it's gone...
Как и потоковый подход, они короткие и приятные, но, в отличие от потокового подхода, они изменяют исходный список. Первый пример также довольно медленный.
Мне нравится потоковый подход, потому что я могу связать дополнительные задачи после задачи фильтрации, включая карту
. сортированный
, уменьшить
и многое другое!. Я нахожу, что традиционный императивный итеративный подход не только более многословен, но и концептуально сложнее следовать.
Оригинал: “https://dev.to/monknomo/filter-null-values-from-a-list-with-java8-lambda-351h”