Java: Композиция функций в потоке - PullRequest
0 голосов
/ 08 октября 2018

Мне нужно создать такой код:

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

Итак, я имею в виду, мне нужно применить две функции к одному элементу.

Есть идеи?

РЕДАКТИРОВАТЬ

Компилятор сообщает мне:

[Java] Тип назначения этого выражения должен быть функциональным интерфейсом

enter image description here

Ответы [ 3 ]

0 голосов
/ 08 октября 2018

Когда вы используете forEach (), вы можете добавить больше функций внутри ... как это

this.getPendingDocuments()
.forEach( element -> {
     this.documentProcessed(element);
     this.createAuditory(element);
});
0 голосов
/ 08 октября 2018

Вы должны target , ваш метод ссылается на тип функционального интерфейса.В этом случае для forEach требуется экземпляр Consumer:

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

Приведенный выше код использует Consumer.andThen для объединения потребителей.Конечно, оба метода должны принимать экземпляр Document в качестве аргумента (или независимо от типа элементов Iterable, возвращаемых методом getPendingDocuments()).

0 голосов
/ 08 октября 2018

Вы можете написать лямбда-выражение, которое выполняет оба метода:

this.getPendingDocuments()
    .forEach(doc -> {
                        this.documentProcessed(doc);
                        this.createAuditory(doc);
                    });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...