Вам лучше обратиться к полному уроку / учебнику, но так как я сам только изучал эти концепции, я немного освежился. Не воспринимайте то, что я здесь пишу, буквально: просто используйте это, чтобы помочь вам лучше понять.
A Stream - это коллекция, которая допускает определенные операции потока только один раз . Думайте, что поток - это одеяло, которое разворачивается после его использования. Потоки - это шаблоны, это означает, что вы определяете и используете потоки чего-либо. Например: Stream<String>
. Так что думайте, что поток - это одеяло, катящееся вокруг ... игрушек (я не знаю, что вы катаете с одеялом?).
При кодировании потока вы злоупотребляете цепочкой метода это означает, что вы не сохраняете результат в переменной, но вызываете один из ее методов на лету. В вашем коде цепочка происходит шесть раз!
Итак, давайте разберем эту цепочку:
dataDao.retrieveAllData()
- это собственный метод, не связанный с потоком. Я предполагаю, что он возвращает специальный объект. .stream()
- это первое звено цепи. Возвращает Stream<XXX>
.filter( )
возвращает элементы для потока, который передает Predicate promo -> promoFilter(promo, startDate, endDate, refs)
. Предикат выражается лямбда-функцией. Но это совершенно другой урок. .map(F)
возвращает поток, который является вводимым потоком, модифицированным функцией F. Снова лямбда. .collect
- это другая функция, которая редактирует поток.
Некоторые учебные пособия, которые помогут вам в учебе, в произвольном порядке:
Надеюсь, я помог!