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

Java8之Lambda表達(dá)式使用解讀

 更新時(shí)間:2022年11月21日 11:58:38   作者:代碼大師麥克勞瑞  
這篇文章主要介紹了Java8之Lambda表達(dá)式使用解讀,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

一、初識(shí)Lambda

Lambda 表達(dá)式(lambda expression)是一個(gè)匿名函數(shù),Lambda表達(dá)式基于數(shù)學(xué)中的λ演算得名,直接對(duì)應(yīng)于其中的lambda抽象(lambda abstraction),是一個(gè)匿名函數(shù),即沒有函數(shù)名的函數(shù)。

Lambda表達(dá)式可以表示閉包(注意和數(shù)學(xué)傳統(tǒng)意義上的不同)。

這是來自萬能的百度百科對(duì)于lambda表達(dá)式的解釋,懂的都懂,不懂的真是聽君一席話,如聽一席話。

Lambda表達(dá)式在Java8中及后續(xù)版本占據(jù)了舉足輕重的地位,對(duì)于函數(shù)式編程來說是必不可少的一環(huán),所以學(xué)會(huì)lambda表達(dá)式,對(duì)于使用Java8的同學(xué)是必經(jīng)之路

舉個(gè)栗子,Java8中的stream你們不會(huì)沒有用過吧?什么?你還在用Java7?阿巴阿巴阿巴…好吧,那我直接用代碼舉個(gè)栗子吧。

1.Lambda栗子

需求是這樣的,二哥第一次來到了大城市,到了大城市就去了 大 保 健,這個(gè)時(shí)候肯定就要選女朋友了,根據(jù)姓名、大小、價(jià)位等,咳咳咳…說錯(cuò)了,是根據(jù)姓名、鞋碼、身價(jià)來選擇,二哥要求經(jīng)理讓這些女朋友按照身價(jià)來正序排隊(duì)站好。

@Data
@AllArgsConstructor
public class Girl {

    private String name;

    private Double size;

    private Double price;
}
    public static void main(String[] args) {
         ArrayList<Girl> list = Lists.newArrayList();
        list.add(new Girl("露西",33d,2000d));
        list.add(new Girl("格蕾絲",36d,3000d));
        list.add(new Girl("安娜",28d,1500d));
        list.add(new Girl("克瑞斯",31d,1800d));
        //匿名函數(shù)類實(shí)現(xiàn)
        list.sort(new Comparator<Girl>() {
            @Override
            public int compare(Girl o1, Girl o2) {
                return o1.getPrice().compareTo(o2.getPrice());
            }
        });
        list.stream().forEach(System.out::println);

        Collections.shuffle(list);
        System.out.println("-------------我是分隔符-----------------");

        //lambda實(shí)現(xiàn)
        list.sort((Girl g1, Girl g2)-> g1.getPrice().compareTo(g2.getPrice()));
        list.stream().forEach(System.out::println);
    }

不難看出,兩種方式都實(shí)現(xiàn)了讓女朋友們按照身價(jià)排隊(duì)。那么我們著重來看看Lambda表達(dá)式。

2.Lambda表達(dá)式的組成

(Girl g1, Girl g2)-> g1.getPrice().compareTo(g2.getPrice());
  • 參數(shù)列表:本例中是兩個(gè)Mask對(duì)象的參數(shù),采用的是Comparator接口中compare方法的參數(shù)。
  • 箭頭:->把參數(shù)列表和主體分隔為兩個(gè)部分。
  • 主體:本例中是把比較價(jià)格的表達(dá)式作為Lambda表達(dá)式的返回。主體可以修改成另外一種寫法,含義是一樣的:
list.sort((Girl g1, Girl g2)-> {
	return g1.getPrice().compareTo(g2.getPrice());
});

由此可以看出,lambda表達(dá)式語法格式可以分為兩種:

  • 1.(parameters) -> expression //參數(shù)列表加單條表達(dá)式
  • 2.(parameters) ->{ statements; } //參數(shù)列表加花括號(hào)和多條語句

以下是lambda表達(dá)式的重要特征:

  • 可選類型聲明:不需要聲明參數(shù)類型,編譯器可以統(tǒng)一識(shí)別參數(shù)值。
  • 可選的參數(shù)圓括號(hào):一個(gè)參數(shù)無需定義圓括號(hào),但多個(gè)參數(shù)需要定義圓括號(hào)。
  • 可選的大括號(hào):如果主體包含了一個(gè)語句,就不需要使用大括號(hào)。
  • 可選的返回關(guān)鍵字:如果主體只有一個(gè)表達(dá)式返回值則編譯器會(huì)自動(dòng)返回值,大括號(hào)需要指定表達(dá)式返回了一個(gè)數(shù)值。

3.舉個(gè)栗子

// 1. 不需要參數(shù),返回值為 5  
() -> 5  
  
// 2. 接收一個(gè)參數(shù)(數(shù)字類型),返回其2倍的值  
x -> 2 * x  
  
// 3. 接受2個(gè)參數(shù)(數(shù)字),并返回他們的差值  
(x, y) -> x – y  
  
// 4. 接收2個(gè)int型整數(shù),返回他們的和  
(int x, int y) -> x + y  
  
// 5. 接受一個(gè) string 對(duì)象,并在控制臺(tái)打印,不返回任何值(看起來像是返回void)  
(String s) -> System.out.print(s)

// 6.接受兩個(gè)int參數(shù),多條語句進(jìn)行比較返回1或者0
(int s1, int s2)->{
	if(s1>s2){
		return 0;
	}
	return 1;
}

二、Lambda更進(jìn)一步

1.類型推斷

 	  //lambda實(shí)現(xiàn)
      list.sort((Girl g1, Girl g2)-> g1.getPrice().compareTo(g2.getPrice()));

      //lambda簡化寫法
      list.sort((g1, g2)-> g1.getPrice().compareTo(g2.getPrice()));

2.方法引用

方法引用通過方法的名字來指向一個(gè)方法。方法引用可以使語言的構(gòu)造更緊湊簡潔,減少冗余代碼。方法引用使用一對(duì)冒號(hào) :: 。

Comparator<Girl> comparator = (g1, g2)-> g1.getPrice().compareTo(g2.getPrice());
//方法引用
Comparator.comparing(Girl::getPrice);

當(dāng)你需要方法引用時(shí),目標(biāo)引用放在分隔符::前,方法的名稱放在分隔符::后。

比如,上面的Girl::getPrice,就是引用了Mask中定義的getPrice方法。

方法名稱后不需要加括號(hào),因?yàn)槲覀儾]有實(shí)際調(diào)用它。

方法引用提高了代碼的可讀性,也使邏輯更加清晰,在一些stream流中,相信大家也經(jīng)常會(huì)用到。

例如:

 List<String> collect = list.stream().map(Girl::getName).collect(Collectors.toList());
 list.stream().forEach(System.out::println);

我們看到第一行通過Girl::getName方法引用,我們收集到了所有女孩的名字,那么第二行我們通過System.out::println打印出了list中的所有對(duì)象。

舉個(gè)栗子:

我們先改造一下實(shí)體類,增加了空參構(gòu)造函數(shù),增加了幾個(gè)方法,有靜態(tài)方法和非靜態(tài)方法。

@Data
@AllArgsConstructor
@NoArgsConstructor
public class Girl {

    private String name;

    private Double size;

    private Double price;


    //Supplier是jdk1.8的接口,這里和lamda一起使用了
    public static Girl create(final Supplier<Girl> supplier) {
        return supplier.get();
    }

    public static void makeUp(final Girl girl) {
        System.out.println("化妝  " + girl.toString());
    }

    public void follow(final Girl another) {
        System.out.println("Following the " + another.toString());
    }

    public void dressUp() {
        System.out.println("更衣 " + this.toString());
    }
}

4種不同的方法引用

	  //構(gòu)造器引用:它的語法是Class::new,或者更一般的Class< T >::new實(shí)例如下:
       Girl girl = Girl.create(Girl::new);
       List<Girl> girls = Arrays.asList(girl);

       //靜態(tài)方法引用:它的語法是Class::static_method,實(shí)例如下:
       girls.forEach(Girl::makeUp);

       //特定類的任意對(duì)象的方法引用:它的語法是Class::method實(shí)例如下:
       girls.forEach(Girl::dressUp);

       //特定對(duì)象的方法引用:它的語法是instance::method實(shí)例如下:
       girls.forEach(girl::follow);

到這里,大家對(duì)lambda表達(dá)式應(yīng)該有了初步的認(rèn)識(shí),可以在平時(shí)編碼中多使用,畢竟實(shí)踐出真知?。?/p>

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 基于Java SSM框架實(shí)現(xiàn)簡易的評(píng)教系統(tǒng)

    基于Java SSM框架實(shí)現(xiàn)簡易的評(píng)教系統(tǒng)

    這篇文章主要介紹了通過Java SSM框架實(shí)現(xiàn)一個(gè)簡易的評(píng)教系統(tǒng)的示例代碼,文中的代碼講解詳細(xì),感興趣的小伙伴可以了解一下
    2022-02-02
  • Linux如何尋找Java安裝路徑

    Linux如何尋找Java安裝路徑

    這篇文章主要介紹了Linux如何尋找Java安裝路徑問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-03-03
  • BeanUtils.copyProperties()參數(shù)的賦值順序說明

    BeanUtils.copyProperties()參數(shù)的賦值順序說明

    這篇文章主要介紹了BeanUtils.copyProperties()參數(shù)的賦值順序說明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • maven安裝與環(huán)境配置圖文教程

    maven安裝與環(huán)境配置圖文教程

    這篇文章主要為大家詳細(xì)介紹了maven安裝與環(huán)境配置圖文教程,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-10-10
  • JavaWeb中的Response常用方法解析

    JavaWeb中的Response常用方法解析

    這篇文章主要介紹了JavaWeb中的Response常用方法解析,response對(duì)象是用來對(duì)客戶端進(jìn)行響應(yīng)的當(dāng)瀏覽器發(fā)出請求時(shí),?Web容器創(chuàng)建一個(gè)ServletRequest對(duì)象封裝請求信息,一個(gè)ServletResponse對(duì)象封裝響應(yīng)信息,對(duì)象作為Servlet的service()方法中的參數(shù),需要的朋友可以參考下
    2023-11-11
  • Prometheus pushgateway的使用詳解

    Prometheus pushgateway的使用詳解

    為了防止 pushgateway 重啟或意外掛掉,導(dǎo)致數(shù)據(jù)丟失,我們可以通過 -persistence.file 和 -persistence.interval 參數(shù)將數(shù)據(jù)持久化下來,接下來通過本文給大家介紹下Prometheus pushgateway的使用,感興趣的朋友一起看看吧
    2021-11-11
  • Java將Word轉(zhuǎn)換成PDF的常用用法

    Java將Word轉(zhuǎn)換成PDF的常用用法

    Java開發(fā)人員在處理文檔轉(zhuǎn)換時(shí),常常需要將Word或Excel文檔轉(zhuǎn)換為PDF格式,以便于更好地保持格式一致性、便于分發(fā)和打印,這篇文章主要給大家介紹了關(guān)于Java將Word轉(zhuǎn)換成PDF的常用用法,需要的朋友可以參考下
    2024-08-08
  • 關(guān)于maven項(xiàng)目引入maven庫沒有的jar處理辦法

    關(guān)于maven項(xiàng)目引入maven庫沒有的jar處理辦法

    這篇文章主要介紹了關(guān)于maven項(xiàng)目引入maven庫沒有的jar處理辦法,在平時(shí)開發(fā)中,有些jar包是不存在maven中央庫中的,那么此時(shí)該如何解決才能方便后續(xù)處理呢,需要的朋友可以參考下本文
    2023-03-03
  • 關(guān)于mybatis-plus邏輯刪除無效的問題

    關(guān)于mybatis-plus邏輯刪除無效的問題

    這篇文章主要介紹了mybatis-plus邏輯刪除無效,文中給大家提到了配置過程及全部代碼,代碼簡單易懂,需要的朋友可以參考下
    2021-09-09
  • Spring Boot 整合 MongoDB的示例

    Spring Boot 整合 MongoDB的示例

    這篇文章主要介紹了Spring Boot 整合 MongoDB的示例,幫助大家更好的理解和學(xué)習(xí)spring boot框架,感興趣的朋友可以了解下
    2020-10-10

最新評(píng)論

沐川县| 神农架林区| 兴安县| 邻水| 仪征市| 丰顺县| 安乡县| 石泉县| 区。| 靖远县| 齐齐哈尔市| 安阳县| 南乐县| 延吉市| 方城县| 崇义县| 石景山区| 巫溪县| 蒙阴县| 衡阳县| 东港市| 高雄县| 桑植县| 仙游县| 山西省| 衡阳县| 客服| 沂南县| 民勤县| 铜山县| 白玉县| 教育| 甘孜县| 万全县| 玛曲县| 岢岚县| 天柱县| 平顺县| 突泉县| 沈丘县| 罗定市|