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

Java 8: Понять, легко лямбда-функции, главной новинкой!

Создание Лямбда-Функции была главной новостью Java 8, выпущенный в 2014 году… С тегами java, java8, lambda, programacao funcional.

Создание Лямбда-Функции было главной новостью Java 8 , выпущенный в 2014 ! Сегодня является практически обязательным знать, как они работают, и узнать их использовать в коде.

Предпочитает этот видео? Смотреть здесь!

Java 8 функциональное программирование

В течение некоторого времени в JavaScript пришли, если установление таких как язык по умолчанию развития front-end . Ao mesmo tempo scorre também o aparecimento ea популяризация языков como Scala, Kotlin и Python. У этих движений, функциональное программирование, начал становиться все более популярным.

С намерением принести эта возможность также для Java, был создан новый синтаксис лямбда-функции . Если вы никогда не видели, вот:

() -> System.out.println("Hello World")

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

Java без лямбда-функции

Если вы Java-программы в течение некоторого времени, вероятно, уже приходилось писать какой-то код вроде этого:

public static void main(String[] args) {
    new Thread(new Runnable() {
        @Override
        public void run() {
            System.out.println("Hello World");
        }
    }).run();
}

Несмотря на то, что этот код работает отлично, он имеет большую проблему: гигант . Хорошо подумайте, были необходимы 6 строк кода, чтобы создать Поток и печать “Hello World”, то, что должно быть довольно тривиальным. Теперь, посмотрите, это же кода с помощью лямбда-функции:

public static void main(String[] args) {
    new Thread(() -> System.out.println("Hello World")).run();
}

Приведенный выше код интерпретируется компилятором точно так же, как предыдущий, с одной строки кода, и, будучи гораздо более кратким. И самое интересное здесь в том, что мы по-прежнему с помощью то же строитель для создания Поток . Сама IDE, подтверждает это:

Конструктор получать экземпляр Runnable

Компилятор знает, что это лямбда-функция-это экземпляр Runnable , даже если мы не прекратим это явный. Ок, но как он это знает?

Java 8 и концепции SAM

Esse comportamento do compilador fica simples quando entendemos o conceito de Единый абстрактный метод , или СБ . В принципе, любой интерфейс, который имеет один метод, следуя этой концепции. Вскоре, компилятор понимает, что ваша лямбда-функция-это, в самом деле, реализация этого одного метода. Давайте посмотрим внимательно.

Интерфейс Runnable , например, имеет только метод run . Вот он, скопирован прямо из JDK:

@FunctionalInterface
public interface Runnable {
    public abstract void run();
}

Таким образом, при использовании лямбда-функции, как мы это делали выше, компилятор понимает, что она может быть реализации метода run .

Что касается аннотации @FunctionalInterface в этом классе, она только информационное . Она предписывает компилятору, которое управляет ошибка случае, если этот класс не выполните все требования, чтобы быть функциональный интерфейс , то есть, что может быть создано из лямбда-функции. Например, если этот интерфейс, бы два метода , произойдет ошибка компиляции. Несмотря на это, это заметки не является обязательным. Вы можете использовать лямбда-функции с любого интерфейса, который соответствует требования считать функциональным.

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

Функциональное программирование

С лямбда-функции, можно использовать методы, хорошо известные для тех, кто использует JavaScript , filter , map и forEach .

Представьте себе, например , что у вас есть список чисел. Вы хотите напечатать значение из 7 первых, умножается на 2, а если число четное. Рассмотрим один из возможных вариантов реализации с Java традиционный:

public static void main(String[] args) {
    List lista = Arrays.asList(1,5,8,7,4,6,3,2,1,8,5,7,4);
    for (int i = 0; i < 7; i++) {
        Integer numero = lista.get(i);
        if (numero % 2 == 0) {
            System.out.println(numero * 2);
        }
    }
}

Это обычная реализация отлично работает, и, если вы программируете в Java некоторое время назад, вероятно, привыкли ее видеть. Однако, давайте посмотрим, как будет в той же реализации с использованием Streams жалость Java 8 :

public static void main(String[] args) {
    List lista = Arrays.asList(1,5,8,7,4,6,3,2,1,8,5,7,4);
    lista.stream()
        .limit(7)
        .filter(e -> e % 2 == 0)
        .map(e -> e * 2)
        .forEach(System.out::println);
}

Для тех, кто не привык, эта реализация может показаться странным на первый раз. Однако, она намного более сжатый и ограниченной . Можно узнать, точно все операции, которые делаются в этом списке. Очевидно, существует предел ( лимит ), фильтр ( filter ), преобразование ( map ) и действие для каждого элемента ( forEach ).

Это структура лямбда-функция, передаваемая в метод filter :

Структура функции lambda прошлой метод filter

С moment, которые вы узнаете, лямбда-функции и новый интерфейс API Потоков, вы пишете много кода проще как понять, следовательно, более легким обслуживанием. Алем диссо, муито менос прописио а баги .

Реальное преимущество Java 8

Де-факто, принципиальное преимущество функций лямбды нет в Java 8 для разрешения использования де Потоков . Same lasseria практически невозможно использовать Потоки с легкостью. Код будет настолько большим и сложным, что просто не будет полезным. Если вам интересно, как это будет выглядеть выше реализации без использования лямбда-функции, вот. Пожалуйста, никогда не делайте этого.

public static void main(String[] args) {
    List lista = Arrays.asList(1, 5, 8, 7, 4, 6, 3, 2, 1, 8, 5, 7, 4);
    Stream limit = lista.stream().limit(7);
    // nunca escreva um código assim!
    Stream filter = limit.filter(new Predicate() {
        @Override
        public boolean test(Integer e) {
            return e % 2 == 0;
        }
    });
    Stream map = filter.map(new Function() {
        @Override
        public Integer apply(Integer e) {
            return e * 2;
        }
    });
    map.forEach(new Consumer() {
        @Override
        public void accept(Integer t) {
            System.out.println(t);
        }
    });
}

Путь для будущего Java

Несмотря на то, что лямбда-функции были чрезвычайно полезны для запуска API Streams, это было только начало. Несколько Api становятся возможными с помощью функции lambda . O Java 9, por exemplo , trouse Реактивные потоки , o padrao implementado pela famosa biblioteka RxJava .

В описание вероятно, мы будем implement an многие вещи с функциональным программированием и функции лямбды узел Java , как запросы HTTP операций с файлов и связи базы данных .

Хотите узнать немного больше о полезности лямбда-функции? Посмотрите, этой другой статье о том, Потоки и как использовать лямбда-функции с коллекциями.

Поздравления ! Теперь вы знаете, лямбда-выражения в Java 8, и может использовать это знание для доставки проекта | быстро/| и , расти карьера.

Хотите получить доступ к его содержимому на видео? Смотреть здесь!

Хотите получать мои лучшие советы для написания кода, высокое качество и доставки проектов в срок? Потом перейдите сюда .

Хотите узнать, как улучшить свой код каждый день? Тогда последует в twitter : в

Уже видел некоторый код с лямбда-функции в последнее время? Или знаете другие ситуации, в которых мы могли бы использовать? Оставьте комментарий! Поделитесь тоже!

Понравилось, что узнали? Поделитесь с другими Devs!

Post Java 8: Понять, легко лямбда-функции, главной новинкой! появился первый в ринальдо.dev .

Оригинал: “https://dev.to/rinaldodev/java-8-entenda-facilmente-funes-lambda-a-principal-novidade-59b”