Java-8 Stream, фильтры и выполнение карт - PullRequest
0 голосов
/ 28 октября 2019

Я новичок в Java. Только что обнаружил некоторый код, который содержит поток, фильтр и карту. Не могли бы вы объяснить, как это работает.

List<String> refs = dataDao.retrieveData(startDate, endDate);

List<String[]> csvRecords = dataDao.retrieveAllData()
        .stream()
        .filter(promo -> promoFilter(promo, startDate, endDate, refs))
        .map(this::promoSummary)
        .map(builder::toCsvRecord)
        .collect(Collectors.toList());

1 Ответ

0 голосов
/ 28 октября 2019

Вам лучше обратиться к полному уроку / учебнику, но так как я сам только изучал эти концепции, я немного освежился. Не воспринимайте то, что я здесь пишу, буквально: просто используйте это, чтобы помочь вам лучше понять.

A Stream - это коллекция, которая допускает определенные операции потока только один раз . Думайте, что поток - это одеяло, которое разворачивается после его использования. Потоки - это шаблоны, это означает, что вы определяете и используете потоки чего-либо. Например: Stream<String>. Так что думайте, что поток - это одеяло, катящееся вокруг ... игрушек (я не знаю, что вы катаете с одеялом?).

При кодировании потока вы злоупотребляете цепочкой метода это означает, что вы не сохраняете результат в переменной, но вызываете один из ее методов на лету. В вашем коде цепочка происходит шесть раз!

Итак, давайте разберем эту цепочку:

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

Некоторые учебные пособия, которые помогут вам в учебе, в произвольном порядке:

Надеюсь, я помог!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...