Рубрики
Без рубрики

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

O java 8 introduziu várias funcionalidades interessantes, como novas API de Stream, Необязательно, Дата a… Помеченный java, lambda.

O java 8 introduziu varias funcionalidades interessantes, como novus API de Stream, Необязательно, Дата и время e Функциональные интерфейсы.

Данная статья имеет цель сделать краткое введение о том, Интерфейсы и Функциональные представить наиболее распространенные типы доступны начиная с JDK 8.

Интерфейсы функциональных позволяют работать с пробки на Java. Закрытие-это функция, которая знает область, в которой он был создан. То есть функция имеет доступ к вашим переменные и переменные и параметры функции внешнего, который ее создал. Интерфейсы функциональных, также можно, проходя функции по параметрам или вернуть их.

Функциональный Интерфейс должен обязательно иметь один и только один абстрактный метод, но, возможно, других методов, default .

Кроме того, рекомендуется записать интерфейс с @FunctionalInterface . Эта заметка поможет компилятору сообщить об ошибке при попытке добавить еще один абстрактный метод. Содержать это примечание является обязательным, так что соблюдайте правило, чтобы иметь только один абстрактный метод.

Пример:

@FunctionalInterface
public interface Operacao {
    int calcular(int a, int b);
}

Для определения функции из интерфейса, мы используем лямбда-выражений. Лямбда-ничего, это анонимная функция, которая не имеет имени и не связан, как метод класса. Ниже несколько способов создать функцию с помощью лямбда-выражения:

  1. Ключи : когда тело функции имеет несколько инструкций.
Funcao fn = (a, b) -> {
    System.out.println("Realizando a soma..."); // instrução 1
    return a + b; // instrução 2
};
  1. Без ключей : когда функция имеет только один оператор. Результат инструкции a + b возвращается при вызове функции.
Funcao fn = (a, b) -> a + b;
  1. Без скобки аргумент : когда есть только 1 параметр в функции, мы можем опустить скобки.
Funcao fn = x -> x * 2;

Таким образом, используя приведенный выше пример интерфейса Функционирование , создаем несколько математических операций с помощью лямбда-выражения:

Operacao soma = (a, b) -> a + b;
Operacao subtracao = (a, b) -> a - b;
Operacao divisao = (a, b) -> a / b;
Operacao multiplicacao = (a, b) -> a * b;

System.out.println(soma.calcular(1, 2)); // 3
System.out.println(subtracao.calcular(5, 1)); // 4
System.out.println(divisao.calcular(10, 5)); // 2
System.out.println(multiplicacao.calcular(2, 5)); // 10

Анализируя приведенный выше пример, мы можем отметить, что тот же интерфейс используется для различных математических операций, и код был весьма ограничен и самых читаемых!

Но если вы не хотите, чтобы остаться, создавая функциональные интерфейсы в проекте, можно также использовать уже доступные в Java. Давайте знать некоторые?

java.util.функция. Функция R> R>

Эта функция принимает параметр типа T и возвращает значение типа A.

@FunctionalInterface
public interface Function {

    /**
     * Applies this function to the given argument.
     *
     * @param t the function argument
     * @return the function result
     */
    R apply(T t);
}

Пример:

Function dividePorDois = x -> ((float) x / 2);

System.out.println(dividePorDois.apply(15)); // 7.5

java.util.функция. Потребитель

Эта функция принимает параметр типа T, но ничего не возвращает.

@FunctionalInterface
public interface Consumer {

    /**
     * Performs this operation on the given argument.
     *
     * @param t the input argument
     */
    void accept(T t);
}

Пример:

Consumer exibeMensagem = str -> System.out.println(str);
// ou
Consumer exibeMensagem2 = System.out::println;

exibeMensagem.accept("Hello World!"); // Hello World!
exibeMensagem2.accept("Hello World!"); // Hello World!

Обратите внимание, что, как и метод println имеет ту же подпись метода |интерфейса| Потребитель<Строка> (принимает Строку и ничего не возвращает), и есть только один оператор в функции, мы можем передать ссылку на сам метод println . Isso se chama Ссылка на метод .

java.util.функция. Поставщик

Эта функция не принимает параметров и возвращает значение типа T.

@FunctionalInterface
public interface Supplier {

    /**
     * Gets a result.
     *
     * @return a result
     */
    T get();
}

Пример:

Supplier dataAtual = () -> LocalDate.now();

System.out.println(dataAtual.get()); // 2021-06-02

java.util.функция. Предикат

Эта функция принимает параметр типа T и возвращает логическое значение.

@FunctionalInterface
public interface Predicate {

    /**
     * Evaluates this predicate on the given argument.
     *
     * @param t the input argument
     * @return {@code true} if the input argument matches the predicate,
     * otherwise {@code false}
     */
    boolean test(T t);
}

Пример:

Predicate maiorDeIdade = dataNascimento -> {
    return dataNascimento.until(LocalDate.now(), ChronoUnit.YEARS) >= 18;
};

System.out.println(maiorDeIdade.test(LocalDate.of(1985, 10, 5))); // true

Интерфейсы доступны в JDK, описанные в этой статье есть специализации, которые позволяют получать два параметра (добавить префикс Bi ) или работать непосредственно с примитивных типов (добавить префикс Int, , Long или Double ). Примеры: Bi Функция, Int Функция, Длинный Функция e Двойная Функция.

Мы видели четырех основных типов функциональных интерфейс. Настоятельно рекомендую вам изучить различные варианты, что JDK предоставляет и применять их как можно чаще в проектах.

Примеры использования операционной системы neste artigo esta no repositório: https://github.com/andrebuarque/functional-interfaces-java .

До свидания!

Оригинал: “https://dev.to/andrebuarque/introducao-a-interfaces-funcionais-no-java-8-njb”