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

Что такое предикат интерфейса и функции интерфейса?

Написав пост о потребительском интерфейсе, я подумал, что интересно написать о Предикате… С пометкой java, новичок в коде, новички, функционал.

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

Мы начнем с интерфейса предикатов, этот интерфейс представляет собой функциональный интерфейс, немного отличающийся от пользовательского интерфейса, который получает параметр и ничего не возвращает. Интерфейс предикатов получает параметр и возвращает логическое значение. Функция, которую получает интерфейс, – это в первую очередь некоторое сравнение, которое может иметь с возвращением логического значения.

посмотрите пример:

List numbers = Arrays.asList(1,2,3,4,5,6,7,8,9,10);


numbers.stream().filter((c) -> (c % 2) == 0)

В приведенном выше примере мы создаем список, а затем создаем фильтр, чтобы узнать, что такое номера пар. Я использую этот пример, потому что метод “фильтр” получает предикат интерфейса и его легче объяснить в примере.

Таким образом, чтобы получить Предикат, ему нужно передать условие сравнения, в примере, который мы имеем, что делаем “c%2”, чтобы узнать остальную часть деления, если оно равно 0, это сгенерирует ответ true или false, таким образом, удовлетворяющий условиям использования интерфейса предикатов. При выполнении фильтра он будет пропускать вперед только то, что является истинным, и исключать из потока все ложное. Полезно подчеркнуть, что список будет изменять не фильтр, а созданный поток.

List numbers = Arrays.asList(1,2,3,4,5,6,7,8,9,10);

numbers.stream()
                .filter((c) -> (c % 2) == 0)
                .forEach(System.out::println);

Result:

2
4
6
8
10

Представленные результаты представляют собой пары чисел после фильтрации.

Теперь я немного расскажу об интерфейсе функций.

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

@FunctionalInterface
public interface Function {
    R apply(T t);

Как мы можем видеть внутри интерфейса, он получает тип T и возвращает тип R. Этот возврат не обязательно должен возвращать переданный тип, вскоре его можно будет использовать для преобразования.

Посмотрите пример:

List numbers = Arrays.asList("1","2","3");

        numbers.stream()
                .map(c -> new Integer(c))
                .forEach(k -> System.out.println(k + " - Type: " + k.getClass().getSimpleName()));

Result:
1 - Type: Integer
2 - Type: Integer
3 - Type: Integer

В приведенном выше примере у нас есть список строк, после создания потока и использования функции ‘Map’ для преобразования значений строки в целое число и присутствующей в CLI переменной и типа be.

Мы использовали метод Map потока, потому что для его работы необходимо получить функциональный интерфейс, поэтому мы смогли реализовать преобразование строки в целое число. Мы видим шаг за шагом, что метод “Применить” интерфейса получает параметр и выполняет действие и возвращает что-то, что в нашем случае возвращало бы целое число, по этой причине карта метода известна как метод, который используется для преобразования элементов потока.

Представленный пример очень прост, но я считаю, что он подходит для понимания возможных приложений, использующих интерфейс функций или, в основном, Map(), которые облегчают спокойную работу с преобразованием объектов.

Я должен подчеркнуть, что в нашем случае map(), создавая новый поток, все они являются целыми числами, и это ни на что не влияет на принципал потока, он продолжает быть строкового типа.

Мы можем сделать этот код более элегантным, используя ссылку на методы, но это будет темой других постов.

Оригинал: “https://dev.to/wagnernegrao/what-are-the-interface-predicate-and-interface-functions-36o7”