函式式程式設計 Java8語法分析

2021-08-14 19:11:49 字數 3409 閱讀 3618

是一種程式設計模型,把計算機中的運算看做數學中的函式計算,並且避免了狀態及變數的概念 f(x)

第一種:就是在乙個介面中定義唯一的乙個抽象方法,那麼這個介面就是函式式介面

public inte***ce functioninte***cedemo

第二種:通過註解的方式@functionalinte***ce宣告,加註解相當於加了乙個強制性的約束

@functionalinte***ce

public inte***ce functioninte***cedemo

函式式介面裡面也可以有實現方法,好處是修改介面後不需要改實現,使得介面在發布之後仍然可以公升級

@functionalinte***ce

public inte***ce functioninte***cedemo

default void doanything()

}

public class main 

};fi.sayhello();

fi.doanything();

functioninte***cedemo.sayhi();

}}

重寫父類的方法不違背函式式介面的定義

例如重寫equals或tostring

@functionalinte***ce

public inte***ce functioninte***cedemo

default void doanything()

boolean equals(object object);

}

語法組成:

1. 乙個括號內用逗號分隔的形式引數,引數是

函式式介面裡面的方法引數

2. 乙個箭頭號 ->

3. 方法體或者**塊

(parameters) -> expression

public class maindemo2 

}).start();

//lambda簡化後

new thread(()->).start();

//lambda繼續簡化,整個**塊只有一行**,而這一行**就是表示式的返回值的話就可以省略**塊

new thread(()-> system.out.println("i am thread test3")).start();

}}

public class maindemo3 

// });

//lambda表示式實現

// words.sort((string o1,string o2) -> );

//繼續優化

words.sort((o1,o2) ->o2.compareto(o1));

for (string word: words)

}}

lambda表示式能夠簡化**一方面是如上的函式式介面,另一方面是方法的引用

方法引用

1. 引用靜態方法  string::valueof

2. 引用物件的例項方法  x::tostring

3.引用某個型別的任意物件的例項方法 string::tostring

4.引用類建構函式 string::new

public class personinfo implements comparable

public void setname(string name)

@override

public int compareto(personinfo o)

public int compare(personinfo p1 , personinfo p2)

}

/**

* created by xingyuchao on 2018/1/19.

* 工廠方法,將personinfo包裝成函式式介面的方式

*/public class personinfofactory

public personinfo getperson()

}

public class maindemo4 

});print(personinfolist);

//引用物件的例項方法 x::tostring

//引用某個型別的任意物件的例項方法 string::tostring

//引用靜態方法 string::valueof

personinfolist.sort(maindemo4::mycompare);

print(personinfolist);

}public static void print(listpersoninfos)

private static int mycompare(personinfo p1 , personinfo p2)

}

根據返回結果:分為中間操作和最終操作(flume風格 鏈式操作)

根據併發性區分: 序列和並行操作

stream.sequential()

stream.parallel()

中間操作

filter過濾器

sorted  排序

distinct

substream 獲取子流

終止操作

foreach

findfirst

public class person 

public string getname()

public void setname(string name)

public int getage()

public void setage(int age)

@override

public string tostring() ';

}}

public class maindemo5 

};public static void main(string args) );

// 過濾小於24歲的

person.stream().filter(person -> person.getage()>24).foreach( person -> system.out.println(person.tostring()));

}}

java8函式式程式設計(二)

list常用操作 private static list init 迴圈列印集合中每個元素 private static void foreach private static void tolist 計算集合中age 4的元素個數 private static void filter 篩選出顏色為...

初探java8函式式程式設計

lambda引用的是值,不是變數,所以,lambda中引用變數,必須是final變數或者既成事實上的final變數 collect tolist 方法由stream 裡的值生成乙個列表,是乙個及早求值操作 listcollected stream.of a b c collect collector...

java 8 函式式程式設計實戰

函式一二三等值的區分 只要某個值滿足以下三個條件,就能被稱為一等值。可以作為引數傳遞給函式 可以作為函式返回值 可以被賦值給變數 所以數字 字串等常用的值都是一等的。如果僅滿足第一條,而不能作為函式返回值或被賦值給變數,就稱為二等的 second class 假如三條都不滿足,則稱為三等的 thir...