【问题标题】:Java-8 Stream, filters and map executionJava-8 流、过滤器和映射执行
【发布时间】:2019-10-28 14:49:12
【问题描述】:

我是 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());

【问题讨论】:

标签: java-8


【解决方案1】:

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

Stream 是一个集合,它允许某些流操作只允许一次。认为它就像流是在使用后展开的毯子。流是模板,这意味着您定义和使用某些东西的流。例如:Stream&lt;String&gt;。所以认为溪流是一条滚滚的毯子……玩具(我不知道,你用毯子滚什么?)。

当您滥用method chaining 编码流时,这意味着您不会将结果存储到变量中,而是动态调用其方法之一。在您的代码中,链接发生了六次!

那么,让我们剖析一下这个链条:

  • dataDao.retrieveAllData() 是专有方法,与流无关。我假设它返回一个特殊的对象。
  • .stream() 是链条的第一个环节。它返回一个Stream&lt;XXX&gt;
  • .filter( ) 返回通过 Predicate promo -&gt; promoFilter(promo, startDate, endDate, refs) 的流的元素。谓词由 lambda 函数表示。但这完全是另一个教训。
  • .map(F) 返回一个流,该流是由函数 F 修改的输入流。同样是 lambda。
  • .collect 是另一个编辑流的函数。

一些帮助你学习的教程,没有特别的顺序:

希望我能帮上忙!

【讨论】:

    猜你喜欢
    • 2021-09-02
    • 2017-01-20
    • 2018-01-01
    • 2019-01-08
    • 2022-01-18
    • 2018-08-08
    • 2016-08-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多