lambda方法引入

什麼是方法引入:

方法引入:需要結合lambda表達式能夠讓代碼變得更加精簡。

1.匿名內部類使用。

2.Lambda調用匿名內部類。

3.方法引入。

 

方法引入的幾種:

1.靜態方法引入:  類名::(靜態)方法名稱

2.對象方法引入:  類名:: 實例方法名稱

3.實例方法引入:  new 對象   對象實例:: 方法引入

4.構造函數引入:  類名::new

 

一、靜態方法引入:

package com.mayikt.test;

import com.mayikt.service.MessageInterface;

/**
 * 靜態方法引入
 */
public class Test006 {

    public static void main(String[] args) {
        MessageInterface messageInterface = (a) -> System.out.println(a);
        messageInterface.get(123);

        /**
         * 在lambda表達式中方法體直接引入方法
         */
        MessageInterface messageInterface2 = (a) -> Test006.staticGet(a);
        messageInterface.get(12);

        /**
         * 方法引入實際上就是,lambda表達式中方法體直接引入方法
         */
        MessageInterface messageInterface3 = Test006::staticGet;
        messageInterface3.get(3);

        /**
         * Test006::staticGet 爲何能夠等於 (a) -> Test006.staticGet(a);
         *
         * 1.staticGet的參數列表和返回值與MessageInterface都是一樣的。
         */
    }


    public static void staticGet(Integer a){
        System.out.println("staticGet a :" + a);
    }
}
package com.mayikt.service;

@FunctionalInterface
public interface MessageInterface {

    void get(Integer a);
}  

 

方法引入規則:

方法引入實際上就是lambda表達式中直接引入的方法。

必須遵循規範:引入的方法參數列表和返回類型,必須要和函數接口參數列表、返回類型保持一致。

 

二、實例方法引入:

package com.mayikt.test;

import com.mayikt.service.MessageInterface2;

public class Test007 {

    public static void main(String[] args) {
        MessageInterface2 messageInterface2 = () -> "阿收到貨後";
        System.out.println(messageInterface2.getMessage());

        Test007 test007 = new Test007();
        MessageInterface2 messageInterface3 = () -> test007.objGet();
        System.out.println(messageInterface3.getMessage());

        /**
         * 實例方法引入的規則和靜態方法引入規則一樣
         */
        MessageInterface2 messageInterface4 = test007::objGet;
        System.out.println(messageInterface4.getMessage());

    }

    public String objGet(){
        return "阿收到貨後";
    }
}
@FunctionalInterface
public interface MessageInterface2 {

    String getMessage();
}

  

三、構造函數引入

public class Test008 {

    public static void main(String[] args) {
        MessageInterface3 messageInterface3 = () -> new MessageEntity();

        /**
         * 構造函數引入,遵循規範:函數接口返回類型::new
         */
        MessageInterface3 messageInterface4 = MessageEntity::new;
    }

}

  

@FunctionalInterface
public interface MessageInterface3 {

    MessageEntity getMessageEntity();
}

  

public class MessageEntity {

    private String messageId;
    private String messageName;

    public MessageEntity(){

    }

    @Override
    public String toString() {
        return "MessageEntity{" +
                "messageId='" + messageId + '\'' +
                ", messageName='" + messageName + '\'' +
                '}';
    }
}

  

四、對象方法引入

public class Test009 {

    public static void main(String[] args) {
       Function<String, Integer> function = (str) -> str.length();
       System.out.println(function.apply("aksdhalsdh"));

       Function<String, Integer> function2 = String::length;
       System.out.println(function2.apply("aksdhalsdh"));
    }

}

  

 

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