Java Lambda表達式

Java Lambda表達式

在這裡插入圖片描述

在了解Lambda表達式之前我們先來區分一下面向對象的思想和函數式編程思想的區別
面向對象的思想:
做一件事情,找一個能解決這個事情的對象,調用他的方法來解決
函數時編程思想:
只要能獲取到結果,誰去做的都不重要,重視的是結果,不重視過程
使用Lambda表達式的目的是為了簡化我們的程式碼
匿名內部類雖然也簡化了我們的程式碼,但是Lambda比他更簡單,而且語法也更加少

下面我用一段程式碼來演示一下二者的區別

public class Main {
    public static void main(String[] args) {
    //匿名內部類的寫法
        new Thread(new Runnable() {
            @Override
            public void run() {
                System.out.println("這是匿名內部類");
            }
        }).start();
        //Lambda表達式
        new Thread(()-> System.out.println("這是Lambda表達式")).start();
    }
}

結果
在這裡插入圖片描述

我們可以看到Lambda大大的減少了程式碼量,因為Lambda關心的是結果並不是過程,省略的東西他都可以自行推導出來

Lambda的標準格式

Lambda省去面向對象的條條框框,格式有三個部分組成
一些參數
一個箭頭
一段程式碼
(參數類型 參數名稱)——>{程式碼語句}
小括弧內的語法與傳統方法參數列表一致:無參數則留空;多個參數則用逗號分隔。 -> 是新引入的語法格式,代表指向動作。 大括弧內的語法與傳統方法體要求基本一致。

下面用兩個案例來演示Lam打表達式

Calculator介面

package Lambda;

public interface Calculator {
    int sum(int a,int b);
}
package Lambda;

import Rubable.RunableImp;

import java.sql.SQLOutput;

public class Main {
    public static void main(String[] args) {
       sum(10,20,((a, b) -> a+b));
    }
    public  static  void sum(int a,int b,Calculator calculator){
        int sum=calculator.sum(a,b);
        System.out.println("和為:"+sum);
    }

}

結果
在這裡插入圖片描述

Comparator介面

當一個對象數組需要進行排序的時候Array.sort需要一個Comparator介面來指定排序的規則

package Lambda;
import java.util.Arrays;
public class Main {
    public static void main(String[] args) {
    Student[] studentArray={new Student("張三",18),
            new Student("李四",8),
    new Student("王五",55)};
        Arrays.sort(studentArray,(one,two)->one.getAge()-two.getAge());
        for (Student student : studentArray) {
            System.out.println(student);
        }
    }
package Lambda;

public class Student {
    private  String name;
    private  int age;

    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }
}

結果
排序成功
在這裡插入圖片描述

Lambda的省略規則

  1. 小括弧內參數的類型可以省略;
  2. 如果小括弧內有且僅有一個參,則小括弧可以省略;
  3. 如果大括弧內有且僅有一個語句,則無論是否有返回值,都可以省略大括弧、return關鍵字及語句分號。

Lambda’的使用前提

  1. 使用Lambda必須具有介面,且要求介面中有且僅有一個抽象方法。 無論是JDK內置的 Runnable 、 Comparator 介面還是自定義的介面,只有當介面中的抽象方法存在且唯一 時,才可以使用Lambda。
  2. 使用Lambda必須具有上下文推斷。 也就是方法的參數或局部變數類型必須為Lambda對應的介面類型,才能使用Lambda作為該介面的實例。

有且只有一個抽象方法的介面,稱為函數式介面

以上就是Lambda表達式的一些基礎知識,喜歡我的可以點贊收藏,我會經常更新文章,可以關注我喲

在這裡插入圖片描述