欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

淺析Java8的函數(shù)式編程

 更新時(shí)間:2017年05月25日 11:10:11   作者:沒(méi)錯(cuò)我就是在扯淡  
函數(shù)式編程,這個(gè)詞語(yǔ)由兩個(gè)名詞構(gòu)成,函數(shù),編程。這篇文章主要介紹了Java8的函數(shù)式編程 ,需要的朋友可以參考下

前言

本系列博客,介紹的是JDK8 的函數(shù)式編程,那么第一個(gè)問(wèn)題就出現(xiàn)了,為什么要出現(xiàn)JDK8?

  JAVA如果真的這么完美無(wú)缺,那為什么還會(huì)有其他語(yǔ)言的興盛呢?所以說(shuō),沒(méi)有一樣?xùn)|西是絕對(duì)完美的,JDK8包括之后的版本,就是不斷的完善JAVA語(yǔ)言,讓它往更好的方向上去走,面向過(guò)程有它的缺點(diǎn),然而無(wú)疑也有它的優(yōu)點(diǎn),在JAVA8 之前,JAVA欠缺了高效的并行操作,寫一個(gè)并行程序代碼往往是費(fèi)事費(fèi)力又不討好,然而在JAVA8之上,只需要簡(jiǎn)單的修改幾行代碼,就可以讓代碼在多核CPU上完美運(yùn)行,所以為了達(dá)到這個(gè)效果,編寫這樣的JDK類庫(kù),就需要在語(yǔ)言層次上修改現(xiàn)有的JAVA,因此,在JAVA中增加Lambda表達(dá)式就是刻不容緩的任務(wù)了--事實(shí)上在2011年的JDK7版本中預(yù)計(jì)就要引入Lambda,但是因?yàn)榉N種原因,計(jì)劃最終推遲到了2014年的JDK8。

為了達(dá)到高效操作集合類,實(shí)現(xiàn)并行計(jì)算或者操作的目的,你得要學(xué)習(xí)來(lái)自JDK8的新的語(yǔ)法,并且要從面相對(duì)象編程的局限中稍微跳出來(lái)一些,但是比起之前手寫一大段代碼,我覺(jué)得這樣的學(xué)習(xí)是十分值得也是十分必要的,節(jié)省了時(shí)間與成本,同時(shí)也更不容易出錯(cuò)!站在巨人的肩膀上,這是任何一個(gè)人都需要借鑒的方法,為什么每次JDK版本的變更都?xì)v時(shí)幾年?oracle的工程師并不是傻瓜,尤其是在編寫JDK類庫(kù)上,借用他人的代碼并不是可恥的行為,新的代碼更加高效,并且更讓人容易閱讀,這種新代碼更加關(guān)注的它所實(shí)現(xiàn)的業(yè)務(wù)邏輯,而并非實(shí)現(xiàn)機(jī)制,所以你看即使是引入了Lambda,從某種意義上來(lái)說(shuō),這依舊是面向?qū)ο蟮囊环N實(shí)現(xiàn)方法--關(guān)注的并非實(shí)現(xiàn)機(jī)制,這樣的代碼更容易維護(hù),也更不容易出錯(cuò)。

什么是函數(shù)式編程

函數(shù)式編程,這個(gè)詞語(yǔ)由兩個(gè)名詞構(gòu)成,函數(shù),編程。編程這個(gè)詞我就不用解釋了,大家都是做這個(gè)的。函數(shù),其實(shí)單獨(dú)抽離出來(lái)這個(gè)詞語(yǔ),也并不陌生,函數(shù)是什么?初中數(shù)學(xué)就開始學(xué)函數(shù)了,當(dāng)然這里又引申出一個(gè)話題,數(shù)學(xué)與編程語(yǔ)言的關(guān)系,這個(gè)話題以后有時(shí)間再聊(當(dāng)然很有可能以后忘記了 :-D)。

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

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

當(dāng)然函數(shù)式編程如果扯開來(lái),要說(shuō)很多,我這里只是作一個(gè)簡(jiǎn)單的介紹,本系列博客的目的也不是和大家談什么叫函數(shù),我的目的是如何寫高效,易于閱讀維護(hù)的代碼,以及如何更好的利用JDK8的新特性。

Your first Lambda expression

開始使用Java 8時(shí),首先做的就是使用lambda表達(dá)式替換匿名類,而實(shí)現(xiàn)Runnable接口是匿名類的最好示例??匆幌翵ava 8之前的runnable實(shí)現(xiàn)方法,需要4行代碼,而使用lambda表達(dá)式只需要一行代碼。我們?cè)谶@里做了什么呢?那就是用() -> {}代碼塊替代了整個(gè)匿名類。

// 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 !!

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

(params) -> expression
(params) -> statement
(params) -> { statements }

例如,如果你的方法不對(duì)參數(shù)進(jìn)行修改、重寫,只是在控制臺(tái)打印點(diǎn)東西的話,那么可以這樣寫:

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

如果你的方法接收兩個(gè)參數(shù),那么可以寫成如下這樣:

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

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

因此總結(jié)一下的格式是

params=參數(shù),your Code=你的代碼,results=返回值

(params,params) -> {your Code}

如果只有一個(gè)參數(shù)或者一行代碼的話 可以將括號(hào)省略掉,于是就變成了

params -> your Code

如果是有返回值是的話是

(params) -> {return results}

同樣,這種return只有一行的話,也可以簡(jiǎn)寫,例如

x -> x+1

這就等效于

(x) -> {return x+1}

以上所述是小編給大家介紹的Java8的函數(shù)式編程,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!

相關(guān)文章

  • IDEA Debug啟動(dòng)tomcat報(bào)60659端口占用錯(cuò)誤的解決

    IDEA Debug啟動(dòng)tomcat報(bào)60659端口占用錯(cuò)誤的解決

    工作中將開發(fā)工具由Eclipse轉(zhuǎn)為IntelliJ IDEA,在使用過(guò)程中遇到許多問(wèn)題,其中60659端口占用錯(cuò)誤對(duì)于不熟悉IDEA的開發(fā)者來(lái)說(shuō)或許會(huì)比較頭痛,本文就來(lái)解決一下這個(gè)問(wèn)題
    2018-11-11
  • SpringMVC五種類型參數(shù)傳遞及json傳遞參數(shù)

    SpringMVC五種類型參數(shù)傳遞及json傳遞參數(shù)

    本文主要介紹了SpringMVC五種類型參數(shù)傳遞及json傳遞參數(shù),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-07-07
  • Springboot中的Controller解析

    Springboot中的Controller解析

    這篇文章主要介紹了Springboot中的Controller解析,Controller是SpringBoot的基本組件,也是MVC結(jié)構(gòu)的組成部分,其作用是將用戶提交來(lái)的請(qǐng)求通過(guò)URL匹配,分發(fā)給不同的接收器,該接收器會(huì)對(duì)其進(jìn)行相應(yīng)處理,然后返回處理結(jié)果,需要的朋友可以參考下
    2023-09-09
  • java實(shí)現(xiàn)http的Post、Get、代理訪問(wèn)請(qǐng)求

    java實(shí)現(xiàn)http的Post、Get、代理訪問(wèn)請(qǐng)求

    這篇文章主要為大家提供了java實(shí)現(xiàn)http的Post、Get、代理訪問(wèn)請(qǐng)求的相關(guān)代碼,感興趣的小伙伴們可以參考一下
    2016-01-01
  • java實(shí)現(xiàn)圖書館管理系統(tǒng)

    java實(shí)現(xiàn)圖書館管理系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)圖書館管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-10-10
  • Java開發(fā)編程到底是用idea好還是eclipse好

    Java開發(fā)編程到底是用idea好還是eclipse好

    這篇文章主要介紹了Java開發(fā)編程到底是用idea好還是eclipse好,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-08-08
  • Java 和 Kotlin Lambda 表達(dá)式示例詳解

    Java 和 Kotlin Lambda 表達(dá)式示例詳解

    Lambda 表達(dá)式是一種簡(jiǎn)潔的函數(shù)表達(dá)方式,可以把函數(shù)作為一個(gè)方法的參數(shù),或者將代碼塊轉(zhuǎn)換為數(shù)據(jù)傳遞,這篇文章主要介紹了Java 和 Kotlin Lambda 表達(dá)式示例詳解,需要的朋友可以參考下
    2024-06-06
  • 詳解Java編程規(guī)約(命名風(fēng)格、常量定義、代碼格式)

    詳解Java編程規(guī)約(命名風(fēng)格、常量定義、代碼格式)

    這篇文章主要介紹了詳解Java編程規(guī)約(命名風(fēng)格、常量定義、代碼格式),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2019-10-10
  • Java隊(duì)列同步器之CountDownLatch實(shí)現(xiàn)詳解

    Java隊(duì)列同步器之CountDownLatch實(shí)現(xiàn)詳解

    這篇文章主要介紹了Java隊(duì)列同步器之CountDownLatch實(shí)現(xiàn)詳解,CountDownLatch是一個(gè)同步工具類,它允許一個(gè)或多個(gè)線程一直等待,直到其他線程執(zhí)行完后再執(zhí)行,例如,應(yīng)用程序的主線程希望在負(fù)責(zé)啟動(dòng)框架服務(wù)的線程已經(jīng)啟動(dòng)所有框架服務(wù)之后執(zhí)行,需要的朋友可以參考下
    2023-12-12
  • Java?ConcurrentHashMap的源碼分析詳解

    Java?ConcurrentHashMap的源碼分析詳解

    ConcurrentHashMap(CHM)是日常開發(fā)中使用頻率非常高的一種數(shù)據(jù)結(jié)構(gòu),想對(duì)于普通的HashMap,CHM提供了線程安全的讀寫,CHM里面使用了許多比較精妙的優(yōu)化&操作。本文主要對(duì)CHM的整體結(jié)構(gòu)、初始化,查找,插入等做分析
    2023-03-03

最新評(píng)論