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

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術(shù)|正則表達(dá)式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務(wù)器之家 - 編程語言 - Java教程 - 一文帶你掌握J(rèn)ava8中Lambda表達(dá)式 函數(shù)式接口及方法構(gòu)造器數(shù)組的引用

一文帶你掌握J(rèn)ava8中Lambda表達(dá)式 函數(shù)式接口及方法構(gòu)造器數(shù)組的引用

2022-02-12 15:24葉綠體不忘呼吸 Java教程

Java 8 (又稱為 jdk 1.8) 是 Java 語言開發(fā)的一個主要版本。 Oracle 公司于 2014 年 3 月 18 日發(fā)布 Java 8 ,它支持函數(shù)式編程,新的 JavaScript 引擎,新的日期 API,新的Stream API 等

 

函數(shù)式接口概述

只包含一個抽象方法的接口,稱為函數(shù)式接口。

可以通過 Lambda 表達(dá)式來創(chuàng)建該接口的對象。

可以在一個接口上使用 @FunctionalInterface 注解,這樣做可以檢查它是否是一個函數(shù)式接口。同時 javadoc 也會包含一條聲明,說明這個接口是一個函數(shù)式接口。

在java.util.function包下定義了Java 8 的豐富的函數(shù)式接口。

在函數(shù)式編程語言當(dāng)中,函數(shù)被當(dāng)做一等公民對待。在將函數(shù)作為一等公民的編程語言中,Lambda表達(dá)式的類型是函數(shù)。但是在Java8中,有所不同。在Java8中,Lambda表達(dá)式是對象,而不是函數(shù),它們必須依附于一類特別的對象類型――函數(shù)式接口。

簡單的說,在Java8中,Lambda表達(dá)式就是一個函數(shù)式接口的實例。這就是Lambda表達(dá)式和函數(shù)式接口的關(guān)系。也就是說,只要一個對象是函數(shù)式接口的實例,那么該對象就可以用Lambda表達(dá)式來表示。所以用匿名實現(xiàn)類表示的現(xiàn)在都可以用Lambda表達(dá)式來寫。

 

函數(shù)式接口示例

 

1、Runnable接口

一文帶你掌握J(rèn)ava8中Lambda表達(dá)式 函數(shù)式接口及方法構(gòu)造器數(shù)組的引用

 

2、自定義函數(shù)式接口

@FunctionalInterface
public interface MyFunctional01{
    public String getValue();
}

//使用泛型
@FunctionalInterface
public interface MyFunctional02<T>{
    public T getValue(T t);
}

 

3、作為參數(shù)傳遞 Lambda 表達(dá)式

public class LambdaTest {
    public static void main(String[] args) {
        String newStr = toUpperString(str -> str.toUpperCase(),"abcDEf");
        System.out.println(newStr);
    }
    public static String toUpperString(MyFunc<String> my,String str){
        return my.getValue(str);
    }
}

@FunctionalInterface
interface MyFunc<T>{
    public T getValue(T t);
}

 

內(nèi)置函數(shù)式接口

一文帶你掌握J(rèn)ava8中Lambda表達(dá)式 函數(shù)式接口及方法構(gòu)造器數(shù)組的引用

import java.util.function.Consumer;

/**
 * @Author: Yeman
 * @Date: 2021-10-03-22:50
 * @Description:
 */
public class LambdaTest {
    public static void main(String[] args) {
        Consumer<Integer> consumer = i -> System.out.println(i);
        consumer.accept(9);
    }
}

一文帶你掌握J(rèn)ava8中Lambda表達(dá)式 函數(shù)式接口及方法構(gòu)造器數(shù)組的引用

 

Lambda簡述

Lambda 是一個匿名函數(shù),我們可以把 Lambda 表達(dá)式理解為是一段可以傳遞的代碼(將代碼像數(shù)據(jù)一樣進(jìn)行傳遞)。使用它可以寫出更簡潔、更靈活的代碼。作為一種更緊湊的代碼風(fēng)格,使Java的語言表達(dá)能力得到了提升。

其本質(zhì)是作為函數(shù)式接口(只有一個抽象方法)的實例。

Lambda 表達(dá)式:在Java 8 語言中引入的一種新的語法元素和操作符。這個操作符為 “->” , 該操作符被稱為 Lambda 操作符或箭頭操作符。它將 Lambda 分為兩個部分:
①左側(cè):指定了 Lambda 表達(dá)式需要的參數(shù)列表。
②右側(cè):指定了 Lambda 體,是抽象方法的方法體。

 

Lambda語法

1、無參,無返回值

public class LambdaTest {
    public static void main(String[] args) {
        //未使用Lambda表達(dá)式
        Runnable runnable1 = new Runnable() {
            @Override
            public void run() {
                System.out.println("這是第一個語法!");
            }
        };
        runnable1.run();
        System.out.println("======================");
        //使用Lambda表達(dá)式
        Runnable runnable2 = () -> {
            System.out.println("這是用了Lambda表達(dá)式的一個語法!");
        };
        runnable2.run();
    }
}

2、一個參數(shù),無返回值

一文帶你掌握J(rèn)ava8中Lambda表達(dá)式 函數(shù)式接口及方法構(gòu)造器數(shù)組的引用


3、數(shù)據(jù)類型可以省略,因為可由編譯器推斷得出,稱為“類型推斷”

一文帶你掌握J(rèn)ava8中Lambda表達(dá)式 函數(shù)式接口及方法構(gòu)造器數(shù)組的引用


4、Lambda 若只需要一個參數(shù)時,參數(shù)的小括號可以省略

一文帶你掌握J(rèn)ava8中Lambda表達(dá)式 函數(shù)式接口及方法構(gòu)造器數(shù)組的引用


5、Lambda 需要兩個或以上的參數(shù),多條執(zhí)行語句,并且可以有返回值

一文帶你掌握J(rèn)ava8中Lambda表達(dá)式 函數(shù)式接口及方法構(gòu)造器數(shù)組的引用


6、當(dāng) Lambda 體只有一條語句時,return 與大括號若有,都可以省略

一文帶你掌握J(rèn)ava8中Lambda表達(dá)式 函數(shù)式接口及方法構(gòu)造器數(shù)組的引用

 

方法引用

當(dāng)要傳遞給Lambda體的操作,已經(jīng)有實現(xiàn)的方法了,可以使用方法引用。

方法引用可以看做是Lambda表達(dá)式深層次的表達(dá)。換句話說,方法引用就是Lambda表達(dá)式,也就是函數(shù)式接口的一個實例,通過方法的名字來指向一個方法,可以認(rèn)為是Lambda表達(dá)式的一個語法糖。

要求:實現(xiàn)接口的抽象方法的參數(shù)列表和返回值類型,必須與方法引用的方法的參數(shù)列表和返回值類型保持一致。

格式:使用操作符 “::” 將類(或?qū)ο?與方法名分隔開。

如下三種主要使用情況:
對象::非靜態(tài)方法名
類::靜態(tài)方法名
類::非靜態(tài)方法名

示例:

import java.util.Comparator;
import java.util.function.Consumer;

/**
 * @Author: Yeman
 * @Date: 2021-10-03-22:50
 * @Description:
 */
public class LambdaTest {
    public static void main(String[] args) {

        Consumer<Integer> consumer = i -> System.out.println(i);
        consumer.accept(9);

        Consumer<String> stringConsumer = System.out :: println;
        stringConsumer.accept("Hello");

        Comparator<Integer> comparable = (x, y) -> Integer.compare(x,y);
        System.out.println(comparable.compare(2,9));

        Comparator<Integer> integerComparator = Integer :: compare;
        System.out.println(integerComparator.compare(9,2));
    }
}

 

構(gòu)造器引用

格式:ClassName::new

與函數(shù)式接口相結(jié)合,自動與函數(shù)式接口中方法兼容。可以把構(gòu)造器引用賦值給定義的方法,要求構(gòu)造器參數(shù)列表要與接口中抽象方法的參數(shù)列表一致,且方法的返回值即為構(gòu)造器對應(yīng)類的對象。

一文帶你掌握J(rèn)ava8中Lambda表達(dá)式 函數(shù)式接口及方法構(gòu)造器數(shù)組的引用

 

數(shù)組引用

可以將數(shù)組看作一個類,則數(shù)組引用就類似于構(gòu)造器引用。

格式:type[] :: new

import java.util.function.Function;

/**
 * @Author: Yeman
 * @Date: 2021-10-03-22:50
 * @Description:
 */
public class LambdaTest {
    public static void main(String[] args) {
        Function<Integer,String[]> function = length -> new String[length];
        String[] apply = function.apply(3);
        System.out.println(apply[2]);

        System.out.println("================");

        Function<Integer,String[]> function1 = String[] :: new;
        System.out.println(function1.apply(5));
    }
}

到此這篇關(guān)于一文帶你掌握J(rèn)ava8中Lambda表達(dá)式 函數(shù)式接口及方法構(gòu)造器數(shù)組的引用的文章就介紹到這了,更多相關(guān)Java Lambda表達(dá)式內(nèi)容請搜索服務(wù)器之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持服務(wù)器之家!

原文鏈接:https://blog.csdn.net/m0_46653805/article/details/120601943

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 国产小视频在线 | 免费视频完整版在线观看网站 | 都市后宫小说 | 国产经典一区 | 性欧美高清理论片 | 午夜想想爱午夜剧场 | 精品亚洲一区二区三区在线播放 | 亚洲黄色小视频 | 国产一区二区三区水野朝阳 | 青青国产成人久久91网 | 好大好硬好紧太深了受不了 | 国产精品福利在线观看免费不卡 | 日本高清视频在线观看 | 青青青国产在线 | 奇米成人 | tolove第一季动画在线看 | 香蕉免费一区二区三区 | 母爱成瘾在线观看 | 国产日韩欧美成人 | 欧美一区二区三区精品影视 | 校花被老头夺去第一次动图 | 激情另类国内一区二区视频 | 亚洲乱人伦在线 | yw在线观看成人免费 | 亚洲精品国产福利片 | 日韩激情视频在线观看 | 福利视频一区二区牛牛 | 波多野 在线 | 无码专区aaaaaa免费视频 | 肉文高h文 | 国产精品久久久久久久久ktv | 日本高清动作片www欧美 | 91成| 小小水蜜桃视频高清在线观看免费 | 国产在线欧美日韩精品一区二区 | 99在线精品免费视频 | 白鹿扒开内裤露出尿孔 | 放荡的女老板bd中文字幕 | 男人吃奶动态图 | 亚洲六月丁香六月婷婷色伊人 | 欧美日韩亚洲区久久综合 |