Как перевести следующий код в lamba? - PullRequest
0 голосов
/ 26 апреля 2018

Я изучаю лямбду и знаю правило 3 шагов:

  1. Удаление имени метода
  2. Удаление типов параметров
  3. Удаление оператора возврата

1011 *
*

MyInterface myInterface = new MyInterface() 
{
    @Override
    public void printMe(String message) {
        System.out.println(message);
    }
};

Ответ

MyInterface myInterface = new MyInterface(message -> message);

Или

MyInterface myInterface = message -> System.out.println(message);

Или я, может, все не так ...?

Ответы [ 3 ]

0 голосов
/ 26 апреля 2018
MyInterface myInterface = new MyInterface(message -> message);

Приведенная выше строка кода выдает ошибку компиляции. Однако последний вариант верен.

Вы можете использовать method reference или написать свое lambda выражение

MyInterface myInterface = System.out::println; // using method reference

или

MyInterface myInterface = message-> System.out.println(message);
0 голосов
/ 27 апреля 2018

Я добавлю важные пункты, чтобы завершить ответы других:

  1. Где можно использовать лямбды?

Вы можете использовать лямбда-выражение в контексте функционала интерфейс (в двух словах, функциональный интерфейс представляет собой интерфейс, который указывает ровно один абстрактный метод)

То есть ваш интерфейс MyInterface должен быть функциональным интерфейсом.

  1. Дескриптор функции.

Абстрактный метод в вашем функциональном интерфейсе называется function descriptor, поэтому для присвоения лямбда-выражения Функциональный интерфейс, лямбда должна иметь ту же подпись, что и абстрактный метод

Например, ваш интерфейс MyInterface получает только лямбда-выражения, которые принимают строковый параметр и не возвращают ничего (void).


Дополнительно

Пакет java.util.function содержит множество функциональных интерфейсов, которые могут помочь вам работать и использовать лямбда-выражения, и поэтому мы можем сказать, что ваш интерфейс имеет тип Consumer, который является функциональным интерфейсом, который принимает объект на входе и (уничтожить его) вернуть void, см. Пакет java.util.function

0 голосов
/ 26 апреля 2018

Второй вариант правильный. Но обратите внимание, что вы можете очистить код еще дальше, используя ссылки на методы:

MyInterface myInterface = System.out::println;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...