我是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());
答案 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
是另一个编辑流的功能。一些教程可以帮助您进行学习,但没有特定的顺序:
希望我能帮上忙!