日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

项目中使用 java函数式编程_函数式编程在Java8中使用Lambda表达式进行开发

發布時間:2023/12/15 java 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 项目中使用 java函数式编程_函数式编程在Java8中使用Lambda表达式进行开发 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

事情起因

如果不喜歡看故事的同學,請前往下一章節。

事情起因是我打算集成Redis緩存,配置了Redis以后,發現@Cacheable注解始終不生效,折騰了大半天以后,我的心態已經崩了,決定不使用@Cacheable注解了,自己來設置緩存和讀取緩存,當然這篇文章的主題是Lambda表達式,所以緩存的問題一筆帶過。在自己獲取緩存和設置緩存的時候,發現大量重復的代碼,都是一樣的if判斷語句,所以決定寫一個通用的方法把重復的代碼干掉,就想到了可以使用函數式編程,Lambda表達式可以精簡代碼,就分享給大家一下作為參考。

什么是Lambda表達式

Lambda表達式推動Java8發布的最重要新特性。Lambda表達式允許把函數作為一個方法的參數(函數作為參數傳遞進方法中)。所以你必須升級到 JDK8 以上才可以使用Lambda表達式,如果是 JDK7 的同學就無緣Lambda表達式了。

Lambda表達式的格式

(parameters) -> expression 或 (parameters) ->{ statements; }

圓括號中的參數可以不寫類型,編譯器可以統一識別參數值;大括號呢在只有一句的情況下可以省略掉大括號

開始使用Lambda表達式

第一步,需要先定義一個函數式接口,例如

?

1

2

3

4

@FunctionalInterface

public

interface

IFunctionObject?{

Object?function();

}

所謂的函數式接口,首先是接口,然后就是在這個接口里面只能有一個抽象方法。也稱為SAM(Single Abstract Method interfaces)接口。注解@FunctionalInterface用于編譯檢查,如果不符合函數式接口在編譯時就會報錯,是一個錯誤檢查的功能。

第二步,在具體業務邏輯中調用函數式接口,例如

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

/**

*?從緩存中獲取對象,如果沒有則運行對象獲取接口放入緩存

*

*?@param?key????????????H

*?@param?hashKey????????HK

*?@param?functionObject?對象獲取接口

*?@return?對象

*/

protected?Object?cacheGet(String?key,

String?hashKey,

IFunctionObject?functionObject)?{

Object?object?=

null

;

try

{

//從緩存中獲取對象

object?=?redisTemplate.opsForHash()

.get(key,?hashKey);

if

(object?==

null

)?{

//沒有獲取到對象,運行對象獲取接口放入緩存

object?=?functionObject.function();

if?(object?!=null?&&

objectinstanceof?Serializable)

cacheSetHash(key,?hashKey,?object);

}

}

catch

(Exception?e)?{

log.error(e.getMessage(),?e);

}

return

object;

}

第三步,使用Lambda表達式調用我們的業務代碼,例如:

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

/**

*?根據ID獲取文章

*

*?@param?id?ID編號

*?@return?文章

*/

public

Article?getArticleById(Long?id)?{

//先從緩存中獲取,如果沒有就從數據庫中獲取

Article?article?=?(Article)

cacheGet("article",?id.toString(),

()?->?articleMapper.selectByPrimaryKey(id));

//拿到以后,瀏覽量加一

if

(article?!=

null

)?{

setViewAdd(id);

}

return

article;

}

其他函數式接口使用舉例:下面的方法都可以使用Lambda表達式調用

java.lang.Runnable,

java.awt.event.ActionListener,

java.util.Comparator,

java.util.concurrent.Callable

java.util.function包下的接口,如Consumer、Predicate、Supplier等

總結

說一下我的理解,Lambda表達式其實就是一個匿名函數,而這個函數可以當做一個參數在方法間傳遞,可以把函數式接口理解為一個Class類型,Lambda表達式就是這個類型的變量,只不過這個變量比較特殊,他可以運行一些邏輯以后返回結果

總結

以上是生活随笔為你收集整理的项目中使用 java函数式编程_函数式编程在Java8中使用Lambda表达式进行开发的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 影音先锋制服丝袜 | 日韩精品一区二区电影 | 国产一区二区三区高清视频 | 欧美有码在线 | 亚洲激情久久 | 好吊日免费视频 | 国产精品久久久久久亚洲伦 | 男人午夜影院 | 国产精品电影在线观看 | 最近的中文字幕在线看视频 | 美腿丝袜一区二区三区 | 中文字幕日韩三级 | 精品国偷自产国产一区 | 新亚洲天堂 | 国产另类视频 | av字幕网| 国产高清精品一区二区三区 | 亚洲影院在线 | 天天色综合影视 | 久久久久无码国产精品不卡 | 日一区二区 | 亚洲一区二区免费电影 | 曰女同女同中文字幕 | 久久桃花网| 亚洲乱熟女一区二区三区小说 | 好吊色在线视频 | 99成人精品视频 | www,jizz,com | 国产a一级片| 丰满人妻老熟妇伦人精品 | 找av导航 | 污网在线看 | 成人免费视频网 | 男人免费网站 | 荫蒂被男人添免费视频 | 丝袜熟女一区二区 | 女王人厕视频2ⅴk | 亚洲福利一区 | 看黄色网址 | 波多av在线 | 亚洲日本中文 | 日本在线观看一区二区三区 | 国产女人水真多18毛片18精品 | 久操视频在线 | 亚洲综合网在线 | 亚洲一区视频在线 | 欧美大片在线免费观看 | 成人gav| 国产亚洲久一区二区 | 不卡的av在线播放 | 激情文学亚洲色图 | 免费人成视频在线播放 | 国产一区网站 | 日韩精品视频一区二区在线观看 | 福利视频在线导航 | 中文文字幕文字幕高清 | 91天天色| 美女av免费观看 | 中文字幕日韩欧美一区二区 | 久久精品免费播放 | 99成人免费视频 | 久久精品屋 | 高清无码一区二区在线观看吞精 | 久久成人18免费观看 | 涩色网站 | 国产女女调教女同 | 午夜毛片在线观看 | 夜夜操综合 | 亚洲第一视频在线 | 久久精品九九 | 午夜av影视 | av色综合 | 亚洲综合网在线观看 | 麻豆91精品 | 国产又黄又猛的视频 | 欧美激情小视频 | 蜜桃av噜噜 | 国产精品久久久久毛片软件 | 成人激情开心网 | 国产18在线观看 | 国产精品日韩精品欧美精品 | 午夜激情一区 | 尹人成人 | 99精品视频网站 | 少妇肥臀大白屁股高清 | 精品国产鲁一鲁一区二区三区 | 肉感丰满的av演员 | 热精品 | 日日干夜夜草 | 久久久久久久久久久久久久久久久久 | 国产99免费视频 | 亚洲黄色一区二区 | 你懂得在线 | 欧美日韩激情在线观看 | 午夜桃色 | 日日噜噜夜夜爽爽 | 久久免费成人 | 夜夜夜久久久 | 女人囗交吞精囗述 |