JAVA8新特性——Lamda表達式

  JAVA9都要出來了,JAVA8新特性都沒搞清楚,是否是有點掉隊哦~java

  Lamda表達式,讀做λ表達式,它實質屬於函數式編程的概念,要理解函數式編程的產生目的,就要先理解匿名內部類。編程

  先來看看傳統的匿名內部類調用方式:ide

interface MyInterface{

    void lMethod();
}
public class Main {

    public static void test(MyInterface myInterface){
        myInterface.lMethod();
    }

    public static void main(String[] args) {
        test(new MyInterface() {
            @Override
            public void lMethod() {
                System.out.println("Hello World!");
            }
        });
    }
}

  在主類中的這麼幾行代碼,嵌套幾層就爲了輸出一個Hello World!是否是很麻煩?可是因爲java結構的完整性,咱們還不得不那麼作,如今JDK1.8來了。函數式編程

  再來看看使用Lamda表達式改寫上面的代碼:函數

interface MyInterface{

    void lMethod();
}
public class Main {

    public static void test(MyInterface myInterface){
        myInterface.lMethod();
    }

    public static void main(String[] args) {
        test(()->System.out.println("Hello World!"));
    }
}

  這就是Lamda表達式語言,爲了解決匿名內部類繁雜的操做而出現。spa

Lamda語法有三種形式:線程

  • (參數) ->單行語句;
  • (參數) ->{多行語句};
  • (參數) ->表達式;

  括號()能夠大體理解爲就是方法,裏面是參數變量,在上面的例子中()->System.out.println("Hello World!") 前面的()表明void lMethod()方法,它沒有入參,因此爲空,->後面是一個單行語句;code

  若是->後面是多行語句,須要用{ }裝起來,每條語句後須要有分號;blog

  ->後面也能夠是一個表達式,如:a+b等。class

(參數) ->單行語句:

interface MyInterface{

    void lMethod(String str);
}
public class Main {

    public static void test(MyInterface myInterface){
        myInterface.lMethod("Hello World!");//設置參數內容
    }

    public static void main(String[] args) {
        //首先在()中定義此表達式裏面須要接收變量s,後面的單行語句中就可使用該變量了
        test((s)->System.out.println(s));
    }
}

(參數) ->{多行語句}:

interface MyInterface{

    void lMethod(String str);
}
public class Main {

    public static void test(MyInterface myInterface){
        myInterface.lMethod("Hello World!");//設置參數內容
    }

    public static void main(String[] args) {
        //首先在()中定義此表達式裏面須要接收變量s,後面的多行語句中就可使用該變量了。注意:多行語句別少「;」號
        test((s)->{
            s=s+s;
            System.out.println(s);
        });
    }
}

(參數) ->表達式:

interface MyInterface{

    int lMethod(int a,int b);
}
public class Main {

    public static void test(MyInterface myInterface){
        int result=myInterface.lMethod(1,2);//設置參數內容,接收返回參數
        System.out.println(result);
    }
    public static void main(String[] args) {

        test((x,y)-> x*y );//調用方法
        //至關於
//        test((x,y)-> {return  x*y;});
    }
}

  這樣,Lamda表達式就看起來很簡單了,有不有!

  匿名內部類,咱們比較經常使用的地方在哪兒?線程類Thread,之前咱們可能這樣寫:

new Thread(new Runnable() {
@Override
public void run() {
System.out.println("線程操做!");
}
});

  如今,使用Lamda表達式,簡單寫爲:

new Thread(()->System.out.println("線程操做!"));

  

  總結:利用Lamda表達式是爲了不匿名內部類定義過多無用的操做。

相關文章
相關標籤/搜索