最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

一文帶你徹底搞懂Lambda表達(dá)式

 更新時間:2020年09月27日 11:04:48   作者:xqnode  
這篇文章主要介紹了一文帶你徹底搞懂Lambda表達(dá)式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧

1. 為什么使用Lambda表達(dá)式

Lambda是一個匿名函數(shù),我們可以把Lambda表達(dá)式理解為是一段可以傳遞的代碼(將代碼像數(shù)據(jù)一樣進(jìn)行傳遞)??梢詫懗龈啙崱⒏`活的代碼。作為一種更緊湊的代碼風(fēng)格,使Java的語言表達(dá)能力得到了提升。

我們來看一下使用lambda之前創(chuàng)建匿名內(nèi)部類:

new Thread(new Runnable() {
  @Override
  public void run() {
    System.out.println("執(zhí)行Runnable方法");
  }
});

lambda表達(dá)式:

new Thread(() -> System.out.println("執(zhí)行Runnable方法")); // 無參Lambda表達(dá)式

在Idea中遇到可以轉(zhuǎn)換lambda的代碼會有灰色提示,按alt+enter可自動轉(zhuǎn)換:

2. Lambda語法

Java8中引入了一個新的操作符"->”該操作符稱為箭頭操作符或Lambda 操作符。

箭頭操作符將Lambda表達(dá)式拆分成兩部分:

左側(cè): Lambda表達(dá)式的參數(shù)列表

右側(cè): Lambda表達(dá)式中所需執(zhí)行的功能,即Lambda體

示例:

語法格式一:無參數(shù),無返回值。

Runnable r = () -> System.out.println("Hello World");

r.run();

語法格式二:有一個參數(shù),并且無返回值。

Consumer consumer = (x) -> System.out.println(x);
//或者寫成: x -> System. out.println(x); 只有一個參數(shù),括號可以省略
consumer.accept("Hello");

語法格式三:有兩個以上的參數(shù),有返回值,并且Lambda體中有多條語句。

Comparator<Integer> comparator = (x, y) -> {
  System.out.println("Hello");
  return Integer.compare(x, y);
};
TreeSet<Integer> treeSet = new TreeSet<>(comparator);

語法格式四:若Lambda體中只有一條語句,return 和大括號都可以省略不寫,Lambda 表達(dá)式的參數(shù)列表的數(shù)據(jù)類型可以省略不寫,因為JVM編譯器通過上下文推斷出數(shù)據(jù)類型,即類型推斷

Comparator<Integer> com = (x, y) -> Integer .compare(x, y);

關(guān)于類型推斷,其實在數(shù)組中我們早已經(jīng)使用過:

String[] strArr = {"a","b", "c"}; // 類型推斷
// 寫成下面這種方式則編譯報錯
String [] strArr;
strArr = {"a","b", "c"}; 
// 還有List的類型推斷:
List<String> list = new ArrayList<>(); 

3. 函數(shù)式編程接口

上面我們看到的lambda表達(dá)式,其實都依賴于接口的支持,lambda表達(dá)式的本質(zhì)是對接口的一種實現(xiàn)。這種接口稱為函數(shù)式接口,即接口中只有一個抽象方法的接口。函數(shù)式接口可以使用@FunctionInterface注解修飾,表示被修飾的接口必須是函數(shù)式接口。

// 函數(shù)式接口只能有一個抽象方法
@FunctionalInterface
public interface FuncTest {
  void accept(Object o);
}

如果在函數(shù)式接口中寫兩個以上的方法,編譯會報錯:

我們來自己寫一個實際的例子了解下函數(shù)式接口的使用:

// 1.寫一個對傳入?yún)?shù)進(jìn)行操作的函數(shù)式接口
@FunctionalInterface
public interface FuncTest {
  void operation(Integer x);
}

// 2.寫一個方法,將函數(shù)式,接口作為參數(shù)
private static Integer operate(Integer a, FuncTest funcTest) {
  return funcTest.operation(a);
}

// 3.使用函數(shù)式接口
System.out.println(operate(1, (x) -> x + x)); // 輸出 2

可以看到,我們在第3步才開始定義函數(shù)式接口的實際功能,對兩個數(shù)進(jìn)行相加操作并返回結(jié)果。lambda的最大便捷之處就在于此,將代碼作為參數(shù)傳遞,非常靈活,大大精簡我們的代碼。

4. Java8內(nèi)置的4種常用函數(shù)式接口

Consumer :消費型接口

方法:void accept(T t);

Consumer<String> consumer = x -> System.out.println(x);

consumer.accept("Hello"); // 打印Hello

Supplier :供給型接口

方法:T get();

Supplier<String> supplier = () -> "Hello";

System.out.println(supplier.get()); // 打印Hello

Function<T, R> :函數(shù)型接口

方法:R apply(T t);

Function function = x -> "Hello " + x;

System.out.println(function.apply("World"));

Predicate :斷言型接口

方法:boolean test(T t);

Predicate predicate = x -> x == "Hello";

System.out.println(predicate.test("Hello"));

ava.util.function 它包含了很多類,用來支持 Java的 函數(shù)式編程,該包中的函數(shù)式接口有:

5. 總結(jié)

Java8引入lambda表達(dá)式是接收了函數(shù)式編程語言的思想,例如scala之類的,它將函數(shù)視為一等公民,可以使用高階函數(shù)等。和指令式編程相比,函數(shù)式編程強(qiáng)調(diào)函數(shù)的計算比指令的執(zhí)行重要。和過程化編程相比,函數(shù)式編程里函數(shù)的計算可隨時調(diào)用。

lambda表達(dá)式可以使代碼看起來簡潔,但一定程度上增加了代碼的可讀性以及調(diào)試的復(fù)雜性,所以在使用時應(yīng)盡量是團(tuán)隊都熟悉使用,要么干脆就別用,不然維護(hù)起來是件較痛苦的事。

以上這篇一文帶你徹底搞懂Lambda表達(dá)式就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • java數(shù)組基礎(chǔ)詳解

    java數(shù)組基礎(chǔ)詳解

    下面小編就為大家?guī)硪黄狫ava創(chuàng)建數(shù)組的幾種方式總結(jié)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧,希望能給大家?guī)韼椭?/div> 2021-06-06
  • java獲取客服端信息的方法(系統(tǒng),瀏覽器等)

    java獲取客服端信息的方法(系統(tǒng),瀏覽器等)

    下面小編就為大家?guī)硪黄猨ava獲取客服端信息的方法(系統(tǒng),瀏覽器等)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-09-09
  • SpringBoot Nacos實現(xiàn)自動刷新

    SpringBoot Nacos實現(xiàn)自動刷新

    這篇文章主要介紹了SpringBoot Nacos實現(xiàn)自動刷新,Nacos(Dynamic Naming and Configuration Service)是阿里巴巴開源的一個動態(tài)服務(wù)發(fā)現(xiàn)、配置管理和服務(wù)管理平臺
    2023-01-01
  • Java?將HTML轉(zhuǎn)為XML的詳細(xì)步驟

    Java?將HTML轉(zhuǎn)為XML的詳細(xì)步驟

    這篇文章主要介紹了Java?將HTML轉(zhuǎn)為XML,本文將以html轉(zhuǎn)為xml格式為例,介紹如何實現(xiàn)轉(zhuǎn)換,以下是詳細(xì)方法及步驟,需要的朋友可以參考下
    2022-06-06
  • 使用ObjectMapper解析json不用一直new了

    使用ObjectMapper解析json不用一直new了

    這篇文章主要為大家介紹了使用ObjectMapper解析json不用一直new了的方法詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-06-06
  • 新手易懂的Java客戶管理小項目

    新手易懂的Java客戶管理小項目

    本篇文章是作為一個很適合新手閱讀的初級小項目,客戶管理,它主要實現(xiàn)數(shù)據(jù)庫的增刪查改操作,管理每位客戶的不同信息,如果你也是開始學(xué)Java不久,這篇文章將很適合你
    2021-11-11
  • mybatis配置mapper-locations位置的三種方式小結(jié)

    mybatis配置mapper-locations位置的三種方式小結(jié)

    這篇文章主要給大家介紹了關(guān)于mybatis配置mapper-locations位置的三種方式,Mybatis-Plus的初衷是為了簡化開發(fā),而不建議開發(fā)者自己寫SQL語句的,但是有時客戶需求比較復(fù)雜,需要的朋友可以參考下
    2023-08-08
  • springboot訪問404問題的解決辦法

    springboot訪問404問題的解決辦法

    工作中遇到url404問題,解決問題的進(jìn)程比較崎嶇,寫篇文章記錄,下面這篇文章主要給大家介紹了關(guān)于springboot訪問404問題的解決辦法,文中通過圖文介紹的非常詳細(xì),要的朋友可以參考下
    2023-03-03
  • java實現(xiàn)2048小游戲

    java實現(xiàn)2048小游戲

    這篇文章主要為大家詳細(xì)介紹了java實現(xiàn)2048小游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-02-02
  • JavaMe開發(fā)自適應(yīng)滾動顯示

    JavaMe開發(fā)自適應(yīng)滾動顯示

    我們??吹揭恍L動顯示的實例,比如UC瀏覽器中,顯示網(wǎng)頁的內(nèi)容。當(dāng)內(nèi)容比較多時,采用滾動分頁顯示是合理的。在Canvas中繪圖中,多余的內(nèi)容被截斷了。如何實現(xiàn)滾動分頁顯示呢?
    2015-09-09

最新評論

孙吴县| 长沙市| 凤阳县| 保山市| 南投市| 繁峙县| 正镶白旗| 定陶县| 龙里县| 凤冈县| 娄底市| 仪陇县| 合山市| 宁阳县| 桦甸市| 错那县| 潼南县| 芦溪县| 赣榆县| 和政县| 泸州市| 龙江县| 吴忠市| 封丘县| 广灵县| 梅州市| 丹阳市| 陆丰市| 调兵山市| 林周县| 新野县| 曲沃县| 连州市| 泾源县| 长汀县| 宁南县| 庆安县| 沂源县| 秀山| 建阳市| 秦皇岛市|