Первое выражение лямбды
Прежде чем появиться Lambda, если нам нужно было написать многопоточную, нам может понадобиться следующий метод:
Runnable runnable = new Runnable () {@Override public void run () {system.out.println ("hello runnable"); }}; ... Thread.Start ();Приведенный выше пример будет намного проще, если вы перейдете к использованию лямбды:
Runnable noargs = ()-> System.out.println ("Привет, лямбда! ~"); ... thread.start ();Выражение Lambda - это анонимная функция, которая передает поведение, как данные. Выражение использует -> для отделения параметров от тела, -> для предшествующей части параметра, а затем это часть тела.
Другие формы лямбды
Binaryoperator <long> add = (x, y)-> x+y; // или Binaryoperator <long> add = (long x, long y)-> x+y; // или Binaryoperator <long> add = (long x, long y)-> {x+y; };Вышеуказанное - все формы выражений Lambda.
Тогда вопрос:
Что Binaryoperator <long> add = (long x, long y)-> x+y; иметь в виду?
Эта строка кода не говорит о добавлении чисел, но создает функцию для вычисления результата добавления двух чисел. Тип добавления - Binaryoperator <Long>, который не является суммой двух чисел, а код, который добавляет два числа. В следующем примере показано, как использовать эту переменную:
Binaryoperator <long> add = (long x, long y)-> x+y; Long res = add.apply (3L, 4L); System.out.println ("res ="+res); // Выход: res = 7 Функциональный интерфейс
Функциональный интерфейс - это интерфейс только с одним абстрактным методом, используемым в качестве типа выражения лямбда.
Например, Runnable - это интерфейс функции.
Создайте новый интерфейс функции:
Public Interface Addoperator <T, D> {Long Add (t One, D Two);}использовать:
Addoperator <long, long> addoperator = (x, y)-> x +y; System.err.println ("Пользовательский слушатель функций res ="+addoperator.add (34L, 65L)); Целевой тип
Целевой тип относится к типу контекста, в котором расположено выражение Lambda. Например, назначьте выражение лямбды локальной переменной или передайте его методу в качестве параметра. Тип локальной переменной или параметра метода является целевым типом выражения Lambda.
Финал
Если мы ссылаемся на локальную переменную в методе в анонимном внутреннем классе, это требует, чтобы локальная переменная была окончательной.
В Lambda нам не нужно объявлять указанную внешнюю локальную переменную как окончательную, но переменная может быть назначена только один раз.
В следующем примере, если мы удалим комментарии и снова назначим имя, оно не будет скомпилировано, и будет отображаться сообщение об ошибке: локальные переменные, на которые ссылаются из выражения лямбда, должны быть окончательно или эффективно окончательно.
Локальная переменная, на которую ссылается выражение Lambda, должна быть окончательной или фактической финальной.
String name = getUsername (); // name = "hi"; button.addactionListener (event-> system.out.println ("name ="+name)); Тип вывод
Тип вывод выражений Lambda является расширением вывода типа целевого типа, введенного в Java7.
Вывод типа в Java7:
List <string> list = new ArrayList <> ();
В приведенном выше примере мы не указали тип парадигмы ArrayList, а вместо этого выводили тип парадигмы ArrayList на основе типа списка.
Например: addoperator <long, long> addoperator = (x, y)-> x +y;
Через эту статью я надеюсь, что это поможет вам узнать и понять эту часть знаний. Спасибо за поддержку этого сайта!