[2017.02.23] Java8 函数式编程
生活随笔
收集整理的這篇文章主要介紹了
[2017.02.23] Java8 函数式编程
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
以前學過Haskell,前幾天又復習了其中的部分內容。
函數式編程與命令式編程有著不一樣的地方,函數式編程中函數是第一等公民,通過使用少量的幾個數據結構如list、map、set,以及在這些數據結構上的專門定制化操作,來實現代碼的復用。同時函數式編程有惰性求值、高階函數、柯里化、Point-free等風格,常用的幾個函數式風格的操作有 map、filter、reduce/foldr/foldl 等。 Haskell是一種純函數式編程語言,函數沒有副作用。而Python語言和Java8等則是多范式編程語言,提供了部分的函數式編程的實現。
今天閱讀《Java8 函數式編程 (Java 8 Lambdas: Functional Programming for the Masses)》的前幾章,編寫一個簡單的小程序,盡量更多地使用和測試Java8中的lambda表達式、Stream流操作、惰性求值等函數式編程風格。
PS. 最近讀了不少的書籍,很多書對自己真正有用的部分真的不多。曾經傻啦吧唧地拿到一本書從頭到尾沒有重點地看,時間沒少花費,效果卻差強人意。閱讀呀,有時候還是要帶著目的去讀,不管是不是功利性地,只要能夠學得快記得牢用得好,過程都不是問題!
/*** Created by auss on 17-2-23.*/import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;public class Main {public static void main(String[] args) {System.out.println("Hello World!");test_lambda();}public static void test_lambda() {List<Integer> ilist = Stream.of(Arrays.asList(1, 2, 3, 4, 5), Arrays.asList(6, 7, 8, 9)).flatMap(number -> number.stream()) // 合并,惰性求值.peek(value -> System.out.println(" " + value.toString())) // 遍歷輸出.collect(Collectors.toList()); //輸出位list,觸發及時求值操作Integer res = ilist.stream() //List轉化為Stream對象 stream()串行流,parallelStream()并行流.parallel() //將Stream并行化處理.filter(value -> value % 2 != 0) //過濾奇數.map((value) -> value * 3 + 1) //乘以3,加上1.reduce(0, (acc, elem) -> acc + elem); // 累加求和,初始值為0,System.out.println("Result : " + res.toString()); // 變量的自動裝線與拆箱}
}
轉載于:https://www.cnblogs.com/ausk/p/6435093.html
總結
以上是生活随笔為你收集整理的[2017.02.23] Java8 函数式编程的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 童装加盟费多少钱啊?
- 下一篇: 【转载】 stm32之PWM