Более сложные сценарии использования Consumer
Метод andThen
Метод andThen позволяет комбинировать два Consumer таким образом, что сначала выполняется первый Consumer, а затем второй. Это полезно, когда нужно выполнить несколько действий над одним объектом.
Пример:
Пример использования Consumer в Stream API
Consumer часто используется в Stream API для выполнения действий над элементами потока.
Пример использования Consumer с другими функциональными интерфейсами
Consumer можно комбинировать с другими функциональными интерфейсами, такими как Predicate, для создания более сложных сценариев.
#Java #Training #Medium #Functional_programming #Consumer #andThen
Метод andThen
Метод andThen позволяет комбинировать два Consumer таким образом, что сначала выполняется первый Consumer, а затем второй. Это полезно, когда нужно выполнить несколько действий над одним объектом.
Пример:
Consumer<String> printUpperCase = str -> System.out.println(str.toUpperCase());
Consumer<String> printLowerCase = str -> System.out.println(str.toLowerCase());
// Комбинируем два Consumer
Consumer<String> printBoth = printUpperCase.andThen(printLowerCase);
printBoth.accept("Hello"); // HELLO hello
В этом примере мы создали два Consumer: один выводит строку в верхнем регистре, а другой — в нижнем. Метод andThen объединяет их, и результат выполнения printBoth — это сначала вывод строки в верхнем регистре, а затем в нижнем.
Пример использования Consumer в Stream API
Consumer часто используется в Stream API для выполнения действий над элементами потока.
import java.util.Arrays;
import java.util.List;
import java.util.function.Consumer;
public class StreamConsumerExample {
public static void main(String[] args) {
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
// Создаем Consumer для вывода квадратов чисел
Consumer<Integer> printSquare = number -> System.out.println(number * number);
// Применяем Consumer к каждому элементу потока
numbers.stream().forEach(printSquare);
}
}
В этом примере мы используем Consumer для вывода квадратов чисел из списка. Метод forEach в Stream API принимает Consumer и применяет его к каждому элементу потока.
Пример использования Consumer с другими функциональными интерфейсами
Consumer можно комбинировать с другими функциональными интерфейсами, такими как Predicate, для создания более сложных сценариев.
import java.util.Arrays;
import java.util.List;
import java.util.function.Consumer;
import java.util.function.Predicate;
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");
// Создаем Consumer для вывода имен
Consumer<String> printName = name -> System.out.println(name);
// Фильтруем и выводим имена, начинающиеся на "A"
names.stream()
.filter(startsWithA)
.forEach(printName); // Alice
}
}
В этом примере мы используем Predicate для фильтрации имен, начинающихся на "A", и Consumer для вывода отфильтрованных имен.
#Java #Training #Medium #Functional_programming #Consumer #andThen
Методы 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