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

歡迎訪問 生活随笔!

生活随笔

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

java

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

發布時間:2023/12/15 java 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 项目中使用 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表达式进行开发的全部內容,希望文章能夠幫你解決所遇到的問題。

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