2020年12月16日 星期三

lambda

lambda 是匿名函式

 1. interface 的實踐  (interface裡面定義的抽象方法只能一個) 

interface Comparator {

int Compare (int a, int b); 

}

class MyComparator implements Comparator {

@override int Compare (int a, int b ) 

{

return a-b ; 

}

}



1. Comparator c1 = new MyComparator(); 

2. Comparator c2 = new Comperator() {

@Override 

public int compare (int a, int b) {

return a-b ; 

}

}

3. Comparator c3 = {a,b} -> a-b ; 


2. @FunctionalInterface  (抽象方法只能一個 )   


返回值類型 / 方法名 / 參數列表 / 方法體  lambda 只剩下 參數列表和方法體 

()  : 表示參數列表 

{}  : 描述方法體 

-> : lambda運算符: 表示goes to  



3. 

LambdaSingleReturnNoneParameter lambda4 = () > {

System.out.println("lambda4") ; 

return 100; 

};

int ret = lambda4.test(); 


4. 方法引用  可以快速地將一個lambda表達式的實踐 指向 一個已經存在的方法 

語法: 方法的隸屬者 ::方法名 

LambdaSingleReturnSingleParameter lambda5 = a -> a* 2 ;  //a 的值乘以2 傳回  

LambdaSingleReturnSingleParameter lambda6 = a -> a* 2 ;  //a 的值乘以2 傳回 


public Class Syntax3 {


private static int Change( int a )

{

     return a *2  ; 

}


5. 

public class Person {

   public String name ; 

   public int age ; 

   public Person() {

     System.out.println("") ; 

   }

   public Person(String name, int age) {

    this.name = name ; 

    this.age = age ; 

     

   }

}



public Class Syntax3 {

LambdaSingleReturnSingleParameter lambda5 = a -> Change(a) ;  // a goes to Change(a) 

方法引用 引用的Change方法的實踐 

LambdaSingleReturnSingleParameter lambda5 = Syntax3::Change; 

private static int Change( int a )

{

     return a *2  ; 

}


6. 構造方法引用 


public class Person {

   public String name ; 

   public int age ; 

   public Person() {

     System.out.println("") ; 

   }

   public Person(String name, int age) {

    this.name = name ; 

    this.age = age ;  

   }

}


interface PersonCreator {

Person getPerson();  

}



PersonCreator creator = () -> {

return new Person(); 

}

  

 

PersonCreator creator = () -> new Person() ; 

//構造方法的引用 

//在interface當中 返回某個類的對象

PersonCreator creator1 = Person::new ; 

Person a = creator1.getPerson(); 



interface PersonCreator2 {

Person getPerson(String name, int age);  

}


PersonCreator2 creator2 = Person::new ; 

Person b = creator2.getPerson("Stevin", 10); 

沒有留言:

張貼留言

F10 F11 跳掉

 lenovo vantage