Java JDK1.8函數接口

Lambda最最最重要口訣:拷貝小括號 , 寫死右箭頭 , 落地大括號
Lambda表達式是給函數式接口的形參或變量賦值用的一段代碼


@FunctionalInterface //隱身修飾,取消可以有多個抽象方法,加上只能有一個
interface Function{
    //函數接口裏必須有一個抽象方法
    void fun(int x,int y,int z);
    
    //可以有多個default修飾的方法
    default int add2(int x,int y){
        System.out.println(  add3(5,6));
        return x + y;
    }
    //靜態方法只能用於類之間調用,其它類不能調用
    static int add3(int x,int y){
        return x + y;
    }

    default void add4(int x){
        for (int i = 0; x < 10;x++){
            System.out.println("打印;"+x);
        }

    }
}

/**
 * 1.8接口:1.函數接口@FunctionalInterface 
 *         2.static靜態方法
 *         3.default修飾的方法
 *         4.表達式
 *  拷貝小括號 , 寫死右箭頭 , 落地大括號
 */
 class Test {
    public static void main(String[] args) {
        Function function = (x,y,z) -> {};  //這裏的參數對應抽象方法
        System.out.println(function.add2(5,8));  //調用方法
        function.add4(3);   
        

Lambda細節操作

import java.util.TreeSet;

class User{
    private  Integer id;
    private  Integer age;
    private  String name;

    public User(Integer id, Integer age, String name) {
        this.id = id;
        this.age = age;
        this.name = name;
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public Integer getAge() {
        return age;
    }

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

    public String getName() {
        return name;
    }

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

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", age=" + age +
                ", name='" + name + '\'' +
                '}';
    }
}
/**
 *  Lambda 表達式是給函數式接口的形參或變量賦值用的(是一段代碼)
 *  必須是給這個函數式接口的抽象方法傳代碼複用的
 *
 *  格式: (形參)->{lambda方法體}
 *   形參列表就是函數接口的抽象方法的形參列表
 *   方法體就是函數式接口的抽象方法的方法體
 *
 */
class Test {
    public static void main(String[] args) {
        //按照年齡從低到高
        TreeSet<User> user = new TreeSet<>((o1, o2) -> Double.compare(o1.getAge(),o2.getAge()));
        user.add(new User(1,79,"李元霸"));
        user.add(new User(2,23,"李元"));
        for(User user1 :user){
            System.out.println(user1);
        }

    }
}
User{id=2, age=23, name='李元'}
User{id=1, age=79, name='李元霸'}

細節說明

1.當(形參)是空參,那麼()是不能省略
2.當(形參)是有參,類型可以確定,形參的數據類型可以省略
3.當(形參)有參,並且只有一個形參,類型和()都可以省略
4.{lambda方法體}有多個語句,每句語句都要;結束
5.{lambda方法體}只有一個語句,{} 和 ; 可以同時省略
6.如果函數接口的抽象方法的返回值類型不是void,那麼{lambda方法體}裏面要有return返回值語句
如果{lambda方法體}中只有一個{return 返回值;}語句時,次時{} ; return關鍵字這三樣都可以同時省略
7.形參名可以根據自己定義

發佈了66 篇原創文章 · 獲贊 68 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章