Java-8流,过滤器和映射执行

时间:2019-10-28 14:49:12

标签: java-8

我是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 :(得分:0)

您最好参考完整的课程/教程,但是由于我自己只是研究了这些概念,所以我需要进一步复习。不要从字面上理解我在这里写的内容:只是用它来帮助您更好地理解。

Stream是一个集合,它允许某些流操作仅一次。认为它就像一条小溪一样,被用完后就会铺开。流是模板,这意味着您定义和使用某物的流。例如:Stream<String>。因此,以为溪流是一条被毯子缠着的……玩具(我不知道,你用毯子滚动什么?)。

在对流进行编码时,您滥用method chaining,这意味着您没有将结果存储到变量中,而是即时调用其方法之一。在您的代码中,链接发生了六次!

因此,我们来剖析此链:

  • dataDao.retrieveAllData()是专有方法,与流无关。我假设它返回一个特殊对象。
  • .stream()是链中的第一个链接。它返回一个Stream<XXX>
  • .filter( )返回通过Predicate promo -> promoFilter(promo, startDate, endDate, refs)的流的元素。谓词由lambda函数表示。但这完全是另一堂课。
  • .map(F)返回一个流,该流是由函数F修改的输入流。再次是lambda。
  • .collect是另一个编辑流的功能。

一些教程可以帮助您进行学习,但没有特定的顺序:

希望我能帮上忙!