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);
沒有留言:
張貼留言