JAVA筆記_Lambda


Lambda運算式

很多時候某類別我們只會創立一次物件,並且使用這物件一次,但是卻要花費大量的處理,從class定義,object創立,到object的使用這一大個流程,都可以直接在一個括號內處理完,而此種寫法稱為Lambda

  • 沒有方法名稱,擁有參數
  • 不用宣告建立,適合只用一次的地方

基本語法
(參數) -> 運算式/程式區塊{ }
e.g.

(x) -> x*2;
(int a,int b) -> {return a+b;}
(String s) -> {System.out.println(s);}

//也可以沒有參數
() -> {return 3.14;}

e.g. 用Lambda完成物件排序

import java.util.*;

class Student{
    private String name;
    public Student(String name) {this.name=name;}
    public String getName(){return name;}
}

public class test{
    public static void main(String args[]){
        Student[] std1={new Student("Tom"),new Student("Jane"),new Student("Mary")};
         Student[] std2={new Student("Tom"),new Student("Jane"),new Student("Mary")};
        //使用傳統Comparator物件進行排序
        Arrays.sort(std1,new Comparator<Student>(){
            public int compare(Student first,Student second){
                return first.getName().compareTo(second.getName());
            }
        });
        //用Lambda語法
        Arrays.sort(std2,(first,second)->first.getName().compareTo(second.getName()));
    }
}

函數介面

為只有單一虛擬方法的介面,那就很適合用Lambda式來表達

Lambda的演化過程

/定義函數介面
interface Ilike{
    void like();
}

// 1. 外部創立新類別
class Like1 implements Ilike{
    public void like(){
        System.out.println("i like 1");
    }
}

public class Lambda{

    // 2. 創立靜態內部類
    static class Like2 implements Ilike{
        public void like(){
            System.out.println("i like 2");
        }
    }

    public static void main(String args[]){

        Ilike l =new Like1();
        l.like();

        l=new Like2();
        l.like();

        // 3. 創立局部內部類
        class Like3 implements Ilike{
            public void like(){
            System.out.println("i like 3");
            }
        }

        l=new Like3();
        l.like();

        // 4. 創立匿名內部類,沒有類的名稱,必須借助inferface/superclass
        Ilike l = new Ilike() {
            public void like(){
                System.out.println("i like 4");
            }
        };
        l.like();

        // 5. Lambda
        Ilike l=()->{
            System.out.println("i like 5");
        };
        l.like();
    }

}






你可能感興趣的文章

[7] 進階資料型別 part2 - Tuple

[7] 進階資料型別 part2 - Tuple

Let's AI 系列文整理

Let's AI 系列文整理

[Release Notes] 20201116_v1 - Add Email login

[Release Notes] 20201116_v1 - Add Email login






留言討論