Встроенные функциональные интерфейсы

Встроенные функциональные интерфейсы

[https://t.me/source_coding]
Для тех кто забыл ->

Функциональный интерфейс - это интерфейс, который содержит только 1 абстрактный метод (не реализованный). Основное назначение – использование в лямбда-выражениях и в ссылках на методы.

Predicate<T> Действительно ли?🤔

Predicate<T> проверяет соблюдение некоторого условия. Если оно соблюдается, то возвращается значение true. В качестве параметра лямбда-выражение принимает объект типа T:

@FunctionalInterface
public interface Predicate<T> {
    boolean test(T t);
}

Без примеров не обойдемся:

Predicate<String> predicate = x->x.equals("Alex");
boolean isAlex = predicate.test("Alex");
System.out.println(isAlex);
(вывод)
Consumer<T> Сейчас кое-кем воспользуемся😏

Consumer<T> выполняет некоторое действие над объектом типа T, при этом ничего не возвращая:

@FunctionalInterface
public interface Consumer<T> {
    void accept(T t);
}

Ex:

Consumer<Integer> consumer = x-> System.out.println(x*5);
consumer.accept(10);
(вывод)
Function<T, R> - А не превратить ли кого-то в банан🍌?

Function принимает объект типа T, и возвращает объект типа R:

@FunctionalInterface
public interface Function<T, R> {
    R apply(T t);
}

Ex:

public class Main {
    public static void main(String[] args) {
        List<Student> studentList = new ArrayList<>();

        studentList.add(new Student(4.5));
        studentList.add(new Student(4.1));
        studentList.add(new Student(5));
        studentList.add(new Student(3.3));
        studentList.add(new Student(2));
        studentList.add(new Student(3.8));

        printAvgGrade(studentList, x->x.getAvgGrade());
    }

    public static void printAvgGrade(List<Student> studentList, Function<Student, Double> function) {
        for (Student student:studentList) {
            System.out.println(function.apply(student));
        }
    }
}
(вывод)
Supplier<T> - Вот, возьмите, нет, вы что, ничего взамен не надо, благодарности излишни. Всего вам хорошего!

Supplier<T> не принимает никаких аргументов, но возвращает объект типа T:

public interface Supplier<T> {
    T get();
}

Ex:

public interface Supplier<T> {
    T get();
}
Supplier<Double> getMoney = () -> {
    System.out.print("Укажите сумму, которую хотите вывести со счета: ");
    double value = new Scanner(System.in).nextDouble();

    System.out.println("Вы успешно сняли " + value + " долларов!");
    return value;
};

getMoney.get();
(вывод)
UnaryOperator<T> - Пора бы уже улучшить мои оценки..

UnaryOperator<T> принимает в качестве параметра объект типа T, выполняет над ними операции и возвращает результат операций в виде объекта типа T:

public interface UnaryOperator<T> {
    T apply(T t);
}

Ex:

UnaryOperator<Double> pointImprovement = x->x+=2;

double point = 3;
point = pointImprovement.apply(point);

System.out.println("Новая оценка: " + point);
(вывод)
BinaryOperator<T> - Капитан! Что дальше делать с этими двумя?

BinaryOperator<T> принимает в качестве параметра два объекта типа T, выполняет над ними бинарную операцию и возвращает ее результат также в виде объекта типа T:

public interface BinaryOperator<T> {
    T apply(T t1, T t2);
}

Ex:

BinaryOperator<Double> operation = (x,y)->(x+y);
double sum = operation.apply(54.0, 100.0);

operation = (x,y)->(x*y);
double product = operation.apply(2.0, 50.0);

System.out.println("Sum: " + sum);
System.out.println("Product: " + product);
(вывод)

На этом все. Спасибо за прочтение.

Report Page