Java for Beginner
675 subscribers
554 photos
156 videos
12 files
845 links
Канал от новичков для новичков!
Изучайте Java вместе с нами!
Здесь мы обмениваемся опытом и постоянно изучаем что-то новое!

Наш YouTube канал - https://www.youtube.com/@Java_Beginner-Dev

Наш канал на RUTube - https://rutube.ru/channel/37896292/
Download Telegram
Методы 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