Java8中的lambda表達式

學習中,如果有錯誤請幫忙及時指出,避免誤導。

一、lambda使用條件

接口中只能有一個未實現的抽象方法(Object中的方法除外,Object中的方法有默認實現),這種接口也叫函數式接口(FunctionalInterface)。

二、lambada表達式的使用

1、靜態方法引用(類:靜態方法)

將一個靜態方法作爲參數傳遞給一個FunctionalInterface,FunctionalInterface中的抽象方法會使用該方法的業務邏輯。

2、實例對象引用(實例:實例方法)

和靜態方法引用類似,只是方法是非靜態的,引用的時候是new出類的實例之後,引用該非靜態方法。

3、參數對象引用(名字感覺怪怪的     類:實例方法)

三、Demo完整代碼

package com.study.lambda;

/**
 * @author zhangdj
 * @date 2019/7/26
 */
public class LambdaDemo1 {
    public static void main(String[] args) {
        //調用show方法 並使用lambada表達式實現方法的邏輯
        System.out.println("單行語句1---------");
        show((n, m) -> n + m + n + m);
        //爲了增強可讀性,也可以加上數據類型
        System.out.println("單行語句2---------");
        show((String n, String m) -> n + m + n + m);
        //也可以寫成 語句塊 的形式,可以實現多行業務邏輯,而且必須顯示使用return。 上面兩種方式只能單行
        System.out.println("語句塊--------");
        show((n, m) -> {
            System.out.println(n);
            return n + m + n + m;
        });
        //靜態方法引用   method1方法參數類型 和MyInterface接口中的抽象方法參數類型及個數相同
        // 可以使用方法引用 將method1方法作爲邏輯傳遞給MyInterface
        System.out.println("靜態方法引用------");
        show(LambdaDemo1::staticMethod);
        //實例對象引用 就是方法不是靜態的 需要new出實例引用方法
        System.out.println("實例對象引用-----");
        show(new LambdaDemo1()::noStaticMethod);
        //參數對象引用
        System.out.println("參數對象引用-----");
        //等價於show((n, m) -> m.concat(m))
        show(String::concat);

    }

    public static void show(MyInterface myInterface) {
        System.out.println(myInterface.get("a", "b"));
    }

    public static String staticMethod(String m, String n) {
        return m + n;
    }

    public String noStaticMethod(String m, String n) {
        return m + n;
    }

    /**
     * 聲明一個接口,可以使用@FunctionalInterface 標記該接口是一個函數式接口 只要不滿足函數式接口的條件就會報錯
     */
    @FunctionalInterface
    public interface MyInterface {
        String get(String m, String n);
    }
}

idea無法編譯lambada表達式解決辦法:https://blog.csdn.net/maqingbin8888/article/details/82698704

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章