Нетрудно понять, что означает это объяснение.
Чтобы объяснить это настолько просто, насколько я могу, метод andThen
возвращает функцию, которая сначала применяет данную функцию к входу, а затем применяет другую функцию к результату этого приложения.
Предположим, у нас было две функции f
и g
, функция f
, выполняющая некоторую логику, и функция g
, выполняющая некоторый другой тип логики, поэтому, когда вы составляете f.andThen(g)
, это по существу означает g(f(x))
, т.е. примените функцию, заданную в качестве аргумента f(x)
, а затем примените функцию g
к результату.
Пример:
BiFunction<Integer, Integer, Integer> f = Math::addExact;
Function<Integer, Integer> g = e -> e * 2;
System.out.println(f.andThen(g).apply(10,10)); // 40
Сначала мы вызываем функцию f(10, 10)
, а затем берем результат, равный 20
, передаем его в функцию g(20)
и выполняем умножение 20
на 2
, следовательно, получая 40
.
Если честно, синтаксис для вызова функции в Java
не самый лучший, каким он может быть, поэтому я могу понять, когда кто-то смотрит на это в первый раз, это может быть трудно понять и становится труднее следовать, чем больше вы сочиняете например, в C#
можно было бы просто выполнить g(f(10, 10))
, что наглядно для глаз легче наблюдать, читать и понимать.
Зачем нужен этот метод? Как это на самом деле вписывается в
картина
По моему опыту, нередко я сочинял функции, как показано выше, но типичный сценарий, который я мог бы себе представить, состоит в том, что если у вас есть различные служебные методы, которые выполняют некоторую логику, где результат одной функции далее передается другим функциям для обработка, и в этом случае вы можете использовать композицию функций для создания различных конвейеров преобразования путем составления служебных методов.