我是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());
你最好参考完整的课程/教程,但由于我自己刚刚学习了这些概念,我需要复习一下。不要把我在这里写的东西当真:只是用它来帮助你更好地理解。
流是一个集合,它只允许一次特定的流操作。把它想象成一条毯子,用完后就会展开。流是模板,这意味着您定义和使用某个东西的流。例如:Stream<String>
。所以,想想这条小溪是一条卷起的毯子。。。玩具(我不知道,你用毯子卷什么?(。
当您滥用方法链接对流进行编码时,这意味着您不将结果存储到变量中,而是动态调用其中一个方法。在您的代码中,链接发生了六次!
所以,让我们来剖析一下这个链条:
dataDao.retrieveAllData()
是一种专有方法,与流无关。我想它会返回一个特殊的对象.stream()
是链的第一个环节。它返回一个Stream<XXX>
.filter( )
返回通过谓词promo -> promoFilter(promo, startDate, endDate, refs)
的流的元素。谓词由lambda函数表示。但这完全是另一个教训.map(F)
返回一个流,该流是由函数F修改的输入流.collect
是另一个编辑流的函数
一些帮助你学习的教程,没有特别的顺序:
- Lambda表达式
- 功能接口
- 流
希望我能帮上忙!