2015-09-25 1 views
2

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

Каковы различные сценарии, где это полезно? Также какова связь между выражением Lambda Expression и функциональным интерфейсом?

+0

При передаче * любого * объекта вы передаете некоторый код, который может быть вызван позже :) например, его методы. – ZhongYu

ответ

6

A Lambda expression используется, когда мы хотим выполнить блок кода позже, один или несколько раз. Фактическая точка его использования является deferred execution и есть много причин для выполнения кода позже, таких как:

  1. Мы хотим, чтобы запустить код в отдельном потоке.
  2. Мы хотим запустить код несколько раз.
  3. Мы хотим запустить его в определенной точке алгоритма, например. сравнение работа во время сортировки.
  4. Мы хотим запустить код, когда какое-то событие происходит, например, при щелчке ссылки и т.д.
  5. Мы хотим, чтобы запустить его только в случае необходимости и т.д.

Связь между лямбда-выражения и функциональный интерфейс

A Functional interface - это интерфейс, который имеет только один метод abtract (хотя он может иметь несколько методов по умолчанию). Мы можем предоставить выражение лямбда всякий раз, когда ожидается объект функционального взаимодействия. Рассмотрим пример, где мы хотим выполнить некоторое действие n раз.

execute(n,() -> System.out.println("Java Rocks")); 

Чтобы принять лямбда второй параметр метода подписи должен быть функциональным интерфейсом и в приведенном выше примере мы можем использовать Runnable например.

public static void execute(int n, Runnable action) { 
    for(int counter = 0; counter < n; counter ++) { 
      action.run(); 
    } 
} 

Дело здесь отметить, что лямбда-выражения выполняется, когда action.run() называется. Вы можете прочитать больше о Lambda Expression here.

+0

Чтобы уточнить связь между ними: '() -> System.out.println (« Java Rocks »)' в этом контексте является (почти) сокращением для 'new Runnable() {public void run() {System.out .println ("Java Rocks");}} '. («Почти», потому что есть тонкие различия) – immibis

Смежные вопросы