1. 程式人生 > 其它 >多執行緒02-Lambda表示式(為了方便實現runnable介面)

多執行緒02-Lambda表示式(為了方便實現runnable介面)

技術標籤:java進階及高階

1. Lamda表示式

Lambda 表示式(lambda expression)是一個匿名函式,Lambda表示式基於數學中的λ演算得名,直接對應於其中的lambda抽象(lambda abstraction),是一個匿名函式,即沒有函式名的函式。Lambda表示式可以表示閉包(注意和數學傳統意義上的不同)。

Java 8的一個大亮點是引入Lambda表示式,使用它設計的程式碼會更加簡潔。當開發者在編寫Lambda表示式時,也會隨之被編譯成一個函式式介面。下面這個例子就是使用Lambda語法來代替匿名的內部類,程式碼不僅簡潔,而且還可讀。

函式式介面的定義:

  • 任何介面,如果質保函唯一一個抽象方法,那麼它就是一個函式式介面
    public interface Runnable{
    public abstract void run();
    }
  • 對於函式式介面,我們可以通過lambda表示式來建立改介面的物件
package com.ren.lambdaShow;

/**
 * @author Ren
 */

/**
 * 推導lambda表示式
 */
public class TestLambda01 {

    //3. 靜態內部類
    static class Like2 implements Ilike{
        @Override
        public
void lambda() { System.out.println("I like lambda2"); } } public static void main(String[] args) { Ilike like = new Like1(); like.lambda(); like = new Like2(); like.lambda(); //4. 區域性內部類 class Like3 implements Ilike
{ @Override public void lambda() { System.out.println("I like lambda3"); } } like = new Like3(); like.lambda(); //5. 匿名內部類 like = new Ilike() { @Override public void lambda() { System.out.println("I like lambda4"); } }; like.lambda(); //6. 用lambda表示式簡化 like = ()->{ System.out.println("I like lambda5"); }; like.lambda(); } } //1. 定義一個函式式介面 interface Ilike { void lambda(); } //2. 實現類 class Like1 implements Ilike { @Override public void lambda() { System.out.println("I like lambda1"); } }

在這裡插入圖片描述

package com.ren.lambdaShow;

/**
 * @author Ren
 */

public class TestLambda02 {

    public static void main(String[] args) {
        Ilove love = null;

        love = (int a)->{
            System.out.println("I love you -> " + a);
        };
        love.love(520);

        //簡化1: lambda表示式簡化 去掉引數型別
        love = (a)->{
            System.out.println("I love you -> " + a);
        };
        love.love(521);

        //簡化2: 去掉括號
        love = a->{
            System.out.println("I love you -> " + a);
        };
        love.love(5201);

        //簡化3: 去掉花括號
        love = a-> System.out.println("I love you -> " + a);
        love.love(555521);

        /**
         * 總結:
         *      lambda表示式只能在只有一行才能簡化成一行,如果有多行,那麼就用程式碼塊包裹
         *      前提是: 介面是函式式介面(一個藉口中只能有一個方法)
         *      多個引數,也可以去掉引數型別,要去的就都去了,必須加上括號(a,b,c)
         */

    }
}

interface Ilove{
    void love(int a);
}

在這裡插入圖片描述