@kvasek

В Java при роботе с filter, map и т.д. нужно вызывать метод stream(). Зачем и почему так спроектировано?

Привет всем,
Я не Java разработчик но меня интересует этот вопрос.

Как я понимаю Java Stream API это просто очень крутой набор синтаксического сахара и функциональных возможностей.

Большинство языков такие как Ruby, C# и другие успешно обходятся без этого метода. Если нужно отфильтровать коллекцию мы просто применяем фильтр без стримов и это удобно и понятно.

Мне интересно зачем проектировщики Java добавили метод stream() ?
С моей стороны это похоже на костыль.
  • Вопрос задан
  • 266 просмотров
Решения вопроса 1
@Free_ze
Пишу комментарии в комментарии, а не в ответы
В Java нет методов расширения, потому на коллекцию можно "навешивать" функциональность аналогичным образом (C#/LINQ), оборачивая коллекцию в Stream<T>.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
@guras256
stream - это рецепт потоковой обработки данных. чтобы он что-либо сделал, нужна терминальная операция. это сделано для ленивости.
например:
listOf(1,2,3,4,5).stream().filter(it -> it > 3).map(it -> it + 1)
такая строчка не сделает ничего, так как стрим не закрыт (нет терминальной операции)
listOf(1,2,3,4,5).stream().filter(it -> it > 3).map(it -> it + 1).collect(toList())
теперь есть терминальная операция collect и строка отработает как ожидается.
причем выполнится все это лениво (в одном цикле), то есть мы не будем обходить list 2 раза, мы обойдем его 1 раз последовательно применяя операции
в данном случае элемент проверяется на >3, увеличивается на 1, следующее число проверяется на >3. увеличивается на 1 и тд
Ответ написан
Комментировать
@Terran37
Программист
Посмотрите, все описал, что зачем и почему. javarules.ru/stream-api
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы