Java:流上的函数组合

时间:2018-10-08 12:21:52

标签: java java-stream

我需要创建如下代码:

this.getPendingDocuments()
    .forEach((this::documentProcessed).andThen(this::createAuditory));

所以我的意思是,我需要将两个函数应用于同一个元素。

有什么想法吗?

编辑

编译器告诉我:

  

[Java]此表达式的目标类型必须是功能接口

enter image description here

3 个答案:

答案 0 :(得分:3)

您可以编写一个执行两个方法的lambda表达式:

this.getPendingDocuments()
    .forEach(doc -> {
                        this.documentProcessed(doc);
                        this.createAuditory(doc);
                    });

答案 1 :(得分:2)

当您使用forEach()时,您可以在其中添加更多功能……像这样

this.getPendingDocuments()
.forEach( element -> {
     this.documentProcessed(element);
     this.createAuditory(element);
});

答案 2 :(得分:1)

您必须 target 您的方法引用功能接口类型。在这种情况下,forEach需要一个Consumer实例:

Consumer<Document> processDocument = this::documentProcessed;
this.getPendingDocuments().forEach(processDocument.andThen(this::createAuditory));

以上代码使用Consumer.andThen链接消费者。当然,这两种方法都应接受一个Document实例作为参数(或Iterable方法返回的getPendingDocuments()元素的类型)。