РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
518 of 1163 menu

Метод compose

Метод compose класса Function создаёт новую функцию, которая сначала применяет функцию, переданную в параметре, а затем - исходную функцию, для которой был вызван метод. В первый параметр мы передаём функцию, которая выполнится первой. Результат её применения становится входным значением для исходной функции.

Иными словами, вызов f.compose(g) возвращает функцию, эквивалентную выражению f(g(x)). Это отличается от метода andThen, который выполняет функции в обратном порядке.

Синтаксис

default <V> Function<V, R> compose(Function<? super V, ? extends T> before)

Пример

Давайте создадим две функции: одну для добавления 1 к числу, а вторую для умножения числа на 2. Скомпонуем их так, чтобы сначала выполнялось умножение, а затем добавление:

import java.util.function.Function; public class Main { public static void main(String[] args) { Function<Integer, Integer> addOne = x -> x + 1; Function<Integer, Integer> multiplyByTwo = x -> x * 2; Function<Integer, Integer> composed = addOne.compose(multiplyByTwo); System.out.println(composed.apply(3)); } }

Результат выполнения кода:

7

Пример

Давайте скомпонуем функции для работы со строками: первая функция добавляет восклицательный знак, вторая переводит строку в верхний регистр. Метод compose сначала применит вторую функцию, а затем первую:

import java.util.function.Function; public class Main { public static void main(String[] args) { Function<String, String> addExclamation = s -> s + "!"; Function<String, String> toUpperCase = s -> s.toUpperCase(); Function<String, String> composed = addExclamation.compose(toUpperCase); System.out.println(composed.apply("abcde")); } }

Результат выполнения кода:

"ABCDE!"

Пример

Давайте используем метод compose вместе со стримами. Создадим функцию, которая сначала удваивает число, а затем добавляет к нему 10, и применим её к каждому элементу списка:

import java.util.List; import java.util.function.Function; import java.util.stream.Collectors; public class Main { public static void main(String[] args) { Function<Integer, Integer> addTen = x -> x + 10; Function<Integer, Integer> multiplyByTwo = x -> x * 2; Function<Integer, Integer> composed = addTen.compose(multiplyByTwo); List<Integer> res = List.of(1, 2, 3, 4, 5) .stream() .map(composed) .collect(Collectors.toList()); System.out.println(res); } }

Результат выполнения кода:

[12, 14, 16, 18, 20]

Смотрите также

  • класс Function,
    который представляет функцию преобразования
  • метод apply,
    который применяет функцию к аргументу
  • метод andThen,
    который выполняет функции в обратном порядке
  • метод map,
    который преобразует элементы стрима
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить