Краткое понимание лямбда-выражений


Лямбда-выражения - это новая функция JDK8, которая может заменить большинство анонимных внутренних классов и написать более элегантный код Java, особенно при обходе коллекций и других операциях сбора, что может значительно оптимизировать структуру кода.
Новые возможности Lambda:

  1. Lambda 表达式,也可称为闭包,它是推动 Java 8 发布的最重要新特性。
  2. Lambda 允许把函数作为一个方法的参数(函数作为参数传递进方法中)。
  3. 使用 Lambda 表达式可以使代码变的更加简洁紧凑。

Важные особенности Lambda:

  • Необязательное объявление типа : нет необходимости объявлять тип параметра, компилятор может единообразно идентифицировать значение параметра.
  • Скобки для необязательных параметров : для одного параметра скобки не требуются, но для нескольких параметров скобки должны быть определены.
  • Необязательные фигурные скобки : если тело содержит оператор, фигурные скобки не требуются.
  • Необязательное ключевое слово return : если субъект имеет только одно возвращаемое значение выражения, компилятор автоматически вернет это значение. Фигурные скобки должны указывать, что выражение возвращает значение.

Базовый синтаксис лямбда

/**多个参数有返回值*/
@FunctionalInterface
public interface ReturnMultiParam {
    
    
    int method(int a, int b);
}

@FunctionalInterface
Ремонт декоративной функции интерфейса , требующий абстрактного интерфейса, - это только один метод . Эта аннотация часто появляется с лямбда-выражениями.

Форма синтаксиса такова () -> {}, где () используется для описания списка параметров, {} используется для описания тела метода, -> - лямбда-оператор, произносится (переходит к).

Упрощение лямбда-синтаксиса

Соответствующий вызов метода:

   //多个参数有返回值
        ReturnMultiParam returnMultiParam = (int a, int b) -> {
    
    
            System.out.println("ReturnMultiParam param:" + "{" + a + "," + b +"}");
            return 1;
        };
        int res3 = returnMultiParam.method(6, 8);

Метод также может быть более лаконичным:

1. 只有一个参数可以省略括号  (int a) >> a  ,且省略参数类型
2. 如果方法体中只有一个语句,则可以省略括号   
   ReturnMultiParam returnMultiParam =  a ->System.out.println("ReturnMultiParam param:" + a);
3. 如上是省略大括号的 有return值的 表达式
   ReturnMultiParam returnMultiParam =  a -> 1 + a;
4. //lambda4 引用了已经实现的 addTwo 方法
   Exe1 exe = new Exe1();
   ReturnOneParam lambda4 = exe::addTwo; // 调用非静态方法
   ReturnOneParam lambda5 = Exe1 ::addTwo2; // 调用静态方法

Ссылка на метод строительства

   interface ItemCreatorParamContruct {
    
    
        Item getItem(int id, String name, double price);
    }

Лямбда-использование метода построения:

        ItemCreatorParamContruct creator3 = Item::new;
        Item item3 = creator3.getItem(112, "鼠标", 135.99);

Эквивалент регулярным выражениям

  ItemCreatorParamContruct creator4 = new ItemCreatorParamContruct() {
    
    
            @Override
            public Item getItem(int id, String name, double price) {
    
    
                return new Item(id, name, price);
            }
        };
        creator4.getItem(112, "鼠标", 135.99);

Использование коллекций

  1. Обход коллекции
      @RequiresApi(api = Build.VERSION_CODES.N)
        ArrayList<Integer> list = new ArrayList<>();
        //lambda表达式 方法引用
        list.forEach(System.out::println);
        list.forEach(element -> {
    
    
            if (element % 2 == 0) {
    
    
                System.out.println(element);
            }
        });
  1. Удалить элементы в коллекции
    ArrayList<Item> items = new ArrayList<>();
    items.removeIf(ele -> ele.getId() == 7);
  1. Сортировка элементов в коллекции
     ArrayList<Item> list = new ArrayList<>();
     list.sort((o1, o2) -> o1.getId() - o2.getId());

Рекомендуемая ссылка:

рекомендация

отblog.csdn.net/luo_boke/article/details/105593241