一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|編程技術|正則表達式|C/C++|

服務器之家 - 編程語言 - JAVA教程 - 淺析Java8的函數式編程

淺析Java8的函數式編程

2020-10-28 15:15沒錯我就是在扯淡 JAVA教程

函數式編程,這個詞語由兩個名詞構成,函數,編程。這篇文章主要介紹了Java8的函數式編程 ,需要的朋友可以參考下

前言

本系列博客,介紹的是JDK8 的函數式編程,那么第一個問題就出現了,為什么要出現JDK8?

  JAVA不是已經很好,很強大了嗎,很多公司用的還是1.6,1.7呀,1.8有必要嗎?更不要提即將問世的JDK9了,魯迅的《拿來主義》說過這么一句話

  JAVA如果真的這么完美無缺,那為什么還會有其他語言的興盛呢?所以說,沒有一樣東西是絕對完美的,JDK8包括之后的版本,就是不斷的完善JAVA語言,讓它往更好的方向上去走,面向過程有它的缺點,然而無疑也有它的優點,在JAVA8 之前,JAVA欠缺了高效的并行操作,寫一個并行程序代碼往往是費事費力又不討好,然而在JAVA8之上,只需要簡單的修改幾行代碼,就可以讓代碼在多核CPU上完美運行,所以為了達到這個效果,編寫這樣的JDK類庫,就需要在語言層次上修改現有的JAVA,因此,在JAVA中增加Lambda表達式就是刻不容緩的任務了--事實上在2011年的JDK7版本中預計就要引入Lambda,但是因為種種原因,計劃最終推遲到了2014年的JDK8。

為了達到高效操作集合類,實現并行計算或者操作的目的,你得要學習來自JDK8的新的語法,并且要從面相對象編程的局限中稍微跳出來一些,但是比起之前手寫一大段代碼,我覺得這樣的學習是十分值得也是十分必要的,節省了時間與成本,同時也更不容易出錯!站在巨人的肩膀上,這是任何一個人都需要借鑒的方法,為什么每次JDK版本的變更都歷時幾年?oracle的工程師并不是傻瓜,尤其是在編寫JDK類庫上,借用他人的代碼并不是可恥的行為,新的代碼更加高效,并且更讓人容易閱讀,這種新代碼更加關注的它所實現的業務邏輯,而并非實現機制,所以你看即使是引入了Lambda,從某種意義上來說,這依舊是面向對象的一種實現方法--關注的并非實現機制,這樣的代碼更容易維護,也更不容易出錯。

什么是函數式編程

函數式編程,這個詞語由兩個名詞構成,函數,編程。編程這個詞我就不用解釋了,大家都是做這個的。函數,其實單獨抽離出來這個詞語,也并不陌生,函數是什么?初中數學就開始學函數了,當然這里又引申出一個話題,數學與編程語言的關系,這個話題以后有時間再聊(當然很有可能以后忘記了 :-D)。

?
1
F(x)=x+1F(x)=x+1

 這就是一個函數呀,所以盡管每個人對函數式編程的理解各不相同,但核心思想都是基于函數上的,也就是說:使用一個不可變的值與函數,對參數進行處理,從而映射成另外一個值。如上圖的F(x)=x+1,你將1放進去,f(1)永遠是等于2,1->f(1),將1映射成了f(1),而f(1)永遠是等于2的。 

當然函數式編程如果扯開來,要說很多,我這里只是作一個簡單的介紹,本系列博客的目的也不是和大家談什么叫函數,我的目的是如何寫高效,易于閱讀維護的代碼,以及如何更好的利用JDK8的新特性。

Your first Lambda expression

開始使用Java 8時,首先做的就是使用lambda表達式替換匿名類,而實現Runnable接口是匿名類的最好示例。看一下Java 8之前的runnable實現方法,需要4行代碼,而使用lambda表達式只需要一行代碼。我們在這里做了什么呢?那就是用() -> {}代碼塊替代了整個匿名類。

?
1
2
3
4
5
6
7
8
9
// Java 8之前:
new Thread(new Runnable() {
  @Override
  public void run() {
  System.out.println("Before Java8, too much code for too little to do");
  }
}).start();
//Java 8方式:
new Thread( () -> System.out.println("In Java8, Lambda expression rocks !!") ).start();

輸出:

too much code, for too little to do
Lambda expression rocks !!

這個例子向我們展示了Java 8 lambda表達式的語法。你可以使用lambda寫出如下代碼:

?
1
2
3
(params) -> expression
(params) -> statement
(params) -> { statements }

例如,如果你的方法不對參數進行修改、重寫,只是在控制臺打印點東西的話,那么可以這樣寫:

?
1
() -> System.out.println("Hello Lambda Expressions");

如果你的方法接收兩個參數,那么可以寫成如下這樣:

?
1
(int even, int odd) -> even + odd

順便提一句,通常都會把lambda表達式內部變量的名字起得短一些。這樣能使代碼更簡短,放在同一行。所以,在上述代碼中,變量名選用a、b或者x、y會比even、odd要好。

因此總結一下的格式是

params=參數,your Code=你的代碼,results=返回值

?
1
(params,params) -> {your Code}

如果只有一個參數或者一行代碼的話 可以將括號省略掉,于是就變成了

?
1
params -> your Code

如果是有返回值是的話是

?
1
(params) -> {return results}

同樣,這種return只有一行的話,也可以簡寫,例如

?
1
x -> x+1

這就等效于

?
1
(x) -> {return x+1}

以上所述是小編給大家介紹的Java8的函數式編程,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對服務器之家網站的支持!

原文鏈接:http://www.cnblogs.com/invoker-/p/6893688.html

延伸 · 閱讀

精彩推薦
  • JAVA教程java實現Spring在XML配置java類的方法

    java實現Spring在XML配置java類的方法

    下面小編就為大家帶來一篇java實現Spring在XML配置java類的方法。小編覺得挺不錯的,現在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧 ...

    java教程網1742020-07-08
  • JAVA教程舉例分析Python中設計模式之外觀模式的運用

    舉例分析Python中設計模式之外觀模式的運用

    這篇文章主要介紹了Python中設計模式之外觀模式的運用,外觀模式主張以分多模塊進行代碼管理而減少耦合,需要的朋友可以參考下 ...

    像風一樣的自由2892020-04-07
  • JAVA教程Java如何在命令行中獲取指定數據

    Java如何在命令行中獲取指定數據

    這篇文章主要介紹了Java如何在命令行中獲取指定數據,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以...

    勤快的懶羊羊4472020-07-30
  • JAVA教程Java 通過反射給實體類賦值操作

    Java 通過反射給實體類賦值操作

    這篇文章主要介紹了Java 通過反射給實體類賦值操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧 ...

    IT 練習生4182020-08-21
  • JAVA教程TreeSet詳解和使用示例_動力節點Java學院整理

    TreeSet詳解和使用示例_動力節點Java學院整理

    TreeSet 是一個有序的集合,它的作用是提供有序的Set集合。這篇文章主要介紹了TreeSet使用示例,具有一定的參考價值,感興趣的小伙伴們可以參考一下...

    skywang123452622020-09-30
  • JAVA教程java使用Socket類接收和發送數據

    java使用Socket類接收和發送數據

    Socket類是負責處理客戶端通信的Java類。本文主要是介紹java使用Socket類接收和發送數據,具有一定的參考價值,感興趣的小伙伴們可以參考一下。...

    pangfc4362020-06-24
  • JAVA教程ant打包jar文件腳本分享

    ant打包jar文件腳本分享

    本文介紹的ant腳本是用來打包jar文件,做完JAVA應用一定會用到這個,需要的朋友可以參考下 ...

    java教程網4752019-11-12
  • JAVA教程SpringBoot去除內嵌tomcat的實現

    SpringBoot去除內嵌tomcat的實現

    這篇文章主要介紹了SpringBoot去除內嵌tomcat的實現,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面...

    碼農農碼一生1492020-09-17
主站蜘蛛池模板: 午夜亚洲WWW湿好大 午夜想想爱 | 女教师波多野结衣高清在线 | 国产剧情麻豆刘玥视频 | 色久久一个亚洲综合网 | 国产精品国产香蕉在线观看网 | 香蕉精品国产高清自在自线 | 日韩免费视频播放 | 和日本免费不卡在线v | segou视频在线观看 | jm漫天堂破解版 | 亚洲日本中文字幕在线2022 | 国产午夜精品一区二区三区 | 法国女佣系列在线播放 | 国产在亚洲线视频观看 | 日韩一级在线观看 | 91果冻制片厂天美传媒 | 性xx色3d动画xx无尽 | 末发育xxxxx仙踪林 | 久久亚洲成a人片 | 幸福草电视剧演员表介绍 | 九九99香蕉在线视频美国毛片 | 成人国产精品一区二区不卡 | 日韩在线视频在线 | 91美女在线观看 | sxx免费看观看美女 sss亚洲国产欧美一区二区 | 男女小视频在线观看 | 亚洲精品老司机福利在线播放 | 娇妻与公陈峰姚瑶小说在线阅读 | 亚洲激情视频在线 | 亚洲 综合 欧美在线 热 | bestialitysex杂交 bedfriend泰剧全集免费观看 | 欧美一区二区三区四区视频 | 国产东北三老头伦一肥婆 | 久久水蜜桃亚洲AV无码精品偷窥 | 亚洲高清免费在线观看 | 91嫩草国产在线观看免费 | 处女私拍 | 国产aⅴ一区二区三区 | np高h疯狂黄暴宫口 narutomanga玖辛奈之乳 | 四虎影视永久免费视频观看 | 91短视频版高清在线观看免费 |