Методы andThen, compose и их использование
Метод andThen
Метод andThen позволяет комбинировать две функции таким образом, что сначала выполняется первая функция, а затем вторая. Результат первой функции передается в качестве входного аргумента второй функции.
Пример:
Метод compose
Метод compose позволяет комбинировать две функции таким образом, что сначала выполняется вторая функция, а затем первая. Результат второй функции передается в качестве входного аргумента первой функции.
Пример:
Пример использования Function в Stream API
Function часто используется в Stream API для преобразования данных.
Пример использования Function с другими функциональными интерфейсами
Function можно комбинировать с другими функциональными интерфейсами, такими как Predicate, для создания более сложных сценариев.
#Java #Training #Medium #Functional_programming #Function #andThen #compose
Метод andThen
Метод andThen позволяет комбинировать две функции таким образом, что сначала выполняется первая функция, а затем вторая. Результат первой функции передается в качестве входного аргумента второй функции.
Пример:
Function<String, Integer> stringLength = str -> str.length();
Function<Integer, String> lengthDescription = length -> "Length is " + length;
// Комбинируем две функции
Function<String, String> describeLength = stringLength.andThen(lengthDescription);
System.out.println(describeLength.apply("Hello")); // Length is 5
В этом примере мы создали две функции: одна преобразует строку в ее длину, а другая преобразует длину в описание. Метод andThen объединяет их, и результат выполнения describeLength — это описание длины строки.
Метод compose
Метод compose позволяет комбинировать две функции таким образом, что сначала выполняется вторая функция, а затем первая. Результат второй функции передается в качестве входного аргумента первой функции.
Пример:
Function<Integer, String> intToString = num -> "Number is " + num;
Function<String, Integer> stringLength = str -> str.length();
// Комбинируем две функции
Function<String, String> describeLength = intToString.compose(stringLength);
System.out.println(describeLength.apply("Hello")); // Number is 5
В этом примере мы создали две функции: одна преобразует строку в ее длину, а другая преобразует число в строку с описанием. Метод compose объединяет их, и результат выполнения describeLength — это описание длины строки.
Пример использования Function в Stream API
Function часто используется в Stream API для преобразования данных.
import java.util.Arrays;
import java.util.List;
import java.util.function.Function;
import java.util.stream.Collectors;
public class StreamFunctionExample {
public static void main(String[] args) {
List<String> names = Arrays.asList("Alice", "Bob", "Charlie", "David", "Eve");
// Создаем Function для преобразования имен в верхний регистр
Function<String, String> toUpperCase = str -> str.toUpperCase();
// Преобразуем список имен в список имен в верхнем регистре
List<String> upperCaseNames = names.stream()
.map(toUpperCase)
.collect(Collectors.toList());
System.out.println(upperCaseNames); // [ALICE, BOB, CHARLIE, DAVID, EVE]
}
}
В этом примере мы используем Function для преобразования списка имен в список имен в верхнем регистре. Метод map в Stream API принимает Function и применяет его к каждому элементу потока.
Пример использования Function с другими функциональными интерфейсами
Function можно комбинировать с другими функциональными интерфейсами, такими как Predicate, для создания более сложных сценариев.
import java.util.Arrays;
import java.util.List;
import java.util.function.Function;
import java.util.function.Predicate;
import java.util.stream.Collectors;
public class CombinedExample {
public static void main(String[] args) {
List<String> names = Arrays.asList("Alice", "Bob", "Charlie", "David", "Eve");
// Создаем Predicate для фильтрации имен, начинающихся на "A"
Predicate<String> startsWithA = name -> name.startsWith("A");
// Создаем Function для преобразования имен в их длины
Function<String, Integer> nameLength = str -> str.length();
// Фильтруем и преобразуем имена
List<Integer> lengths = names.stream()
.filter(startsWithA)
.map(nameLength)
.collect(Collectors.toList());
System.out.println(lengths); // [5]
}
}
В этом примере мы используем Predicate для фильтрации имен, начинающихся на "A", и Function для преобразования отфильтрованных имен в их длины.
#Java #Training #Medium #Functional_programming #Function #andThen #compose