Лямбда-выражения

Лямбда-выражения

Лямбда-выражения работают только с функциональными интерфейсами - интерфейсами, содержащими только один абстрактный метод.


package lambda;

@FunctionalInterface
interface Validate {
   boolean test(String s);
}

class A {
   private static String str = "Some string";

   public static void main(String[] args) {
      Validate valid = s -> s.length() > 3;
      System.out.println(valid.test(str)); // true
   }
}
Тип параметра лямбда-выражения является опциональным: компилятор определяет его на основе типа параметра, принимаемого абстрактным методом интерфейса. Чтобы явно указать тип параметра, его нужно заключить в скобки:


(SomeType obj) -> obj.doSomeChecking();
Тип возвращаемого значения должен соответствовать или быть приводимым к типу, возвращаемому лямбда-выражением. Следующий код не скомпилируется:


Validate valid = s -> 10; // невозможно привести int к boolean
Если в теле лямбда-выражения необходимо выполнить несколько инструкций, или явно использовать ключевое слово return, то тело его нужно зключить в фигурные скобки.


Validate valid1 = s -> {int i = s.indexOf("a"); return i > 0;};
System.out.println(valid1.test(str)); // false

Validate valid2 = s -> {return s.contains("st");};
System.out.println(valid2.test(str)); // true
Методы и Инкапсуляция