java8函數式編程之經常使用流操做<一>

java8的使用愈來愈廣泛,因此要多學習學習使用,爲了更好的瞭解Stream api,因此來寫一下經常使用的Stream操做是很是有必要的,目前看的這本書是《java 8 函數式編程》由於比較薄,因此我喜歡哈哈,下面抄襲的書中的例子來看看。java

Stream的of方法使用一組初始值生成新的stream,collect(toList())方法由Stream裏的值生成一個列表,是一個及早求值操做(固然不少Stream的操做是惰性求值:像filter那樣只是刻畫了出了Stream,但沒有產生新的集合,就叫作惰性求值法,而像count這樣最終會從Stream產生值的方法叫及早求值),大神說能夠把Stream想象成漢堡,將最前和最後的方法想象成兩片面包,這兩片面包幫助咱們認清楚操做的起點和終點。編程

可使用map函數操做,將一個流中值轉換成一個新的流,參數和返回值沒必要屬於同一種類型,可是Lambda表達式必須是Function接口的一個實例,Function接口是隻包含一個參數的普通函數接口(不求甚解?)。api

能夠嘗試用Stream中提供的新方法filter,來遍歷數據並檢查其中的元素。該模式的核心思想是保留Stream中的一些元素,而過濾掉其餘。和map很像,filter接受一個函數做爲參數。函數式編程

flatMap能夠將多個Stream鏈接成一個Stream,和map很像,都是Function藉口,只是方法的返回值限定爲Stream類型罷了。函數

max和min操做能夠解決求最大值和最小值的問題,首先要考慮的是用什麼做爲排序的指標,這裏給她傳了一個Comparator對象,java8提供了一個新的靜態方法comparing,使用它即可以實現一個比較器,咱們須要比較兩個對象的某項值,想在是要傳遞一個方法就能夠了。此外使用max方法還能夠返回空Stream的Optional對象,經過調用get方法能夠取出optional對象中的值。學習

reduce操做能夠實現從一組值中生成一個值,在上述的例子中用到了count,min和max由於經常使用而歸入標準庫中,事實上,這些方法都是reduce操做。對象

 

Stream接口的方法如此之多,真是讓人難以選擇,感受讓人闖入迷宮通常!排序

看着書中這道題,我以爲挺難的,要不你來試試?  接口

只用 reduce 和 Lambda 表達式寫出實現 Stream 上的 map 操做的代碼,若是不想返回 Stream,能夠返回一個 List(書中給出的答案最後)get

相關文章
相關標籤/搜索