JAVA8新特性之Lambda表達(dá)式

作為語法糖啤握,其實現(xiàn)邏輯分為三步:

第一步:有一個函數(shù)式接口(創(chuàng)建一個接口非洲,包含一個未實現(xiàn)的方法);
第二步:有一個方法A,將接口作為A的形參俯画;
第三步:顯示調(diào)用方法A析桥,Lambda表達(dá)式作為實參代替第二步的形參,既完成了接口調(diào)用。

LAMBDA表達(dá)式需要函數(shù)式接口支持

格式:

1. Lambda表達(dá)式的操作符: ->
2. 操作符左側(cè):表達(dá)式參數(shù)列表泡仗;
    操作符右邊:需要執(zhí)行的功能埋虹;
3. 參數(shù)列表,沒有參數(shù)的時候娩怎,小括號不能省略搔课,有一個參數(shù)的時候,可以省略截亦,如果有多個爬泥,小括號不能省略;
4. 參數(shù)列表中參數(shù)類型可以省略崩瓤,Java會自動判斷袍啡;
5. 操作符右側(cè),方法體有多條需要用大括號{}包圍却桶;
6. 操作符右側(cè)葬馋,只有一條語句的時候,return和大括號都可以省略肾扰;

代碼??

package com.learn.noel.jdk8feature;

import org.junit.Test;

/**
 * @Description
 * @Author noel
 * @Date 2021/12/28
 * Version 1.0
 **/
public class Jdk8FeatureApplication {
    //將給定字符串轉(zhuǎn)為大寫字符串
    @Test
    public void converter(){
        //調(diào)用Ⅱ的字符串處理方法畴嘶,lambda表達(dá)式才是接口方法的具體實現(xiàn)
        String result = strHandler("ssass",(str)->str.toUpperCase());//Ⅰ
        System.out.println(result);
    }
    //Ⅱ 
    //定義字符串處理方法,具體實現(xiàn)由調(diào)用的時候決定
    public String strHandler(String str, dealString handler){
        return handler.getValue(str);//調(diào)用Ⅲ中接口的方法集晚,并未實現(xiàn)該方法
    }
}

package com.learn.noel.jdk8feature;

/**
 * @Description
 * @Author noel
 * @Date 2021/12/28
 * Version 1.0
 **/
//Ⅲ
@FunctionalInterface
public interface dealString {
    public String getValue(String s);
}

如果不這樣寫窗悯,可能會:

1、創(chuàng)建一個類偷拔,實現(xiàn)上面的dealString接口蒋院;
2、然后實例化上一步創(chuàng)建的類莲绰,實現(xiàn)該方法欺旧,這個案例是實現(xiàn)小寫全部轉(zhuǎn)換為大寫的功能;
3蛤签、通過實例化方法使用小寫轉(zhuǎn)大寫功能辞友;
4、如果有其他字符串處理功能需要實現(xiàn)震肮,有多少個功能就需要實現(xiàn)多少個對應(yīng)的類和方法称龙,造成代碼冗余;

上面執(zhí)行完成后戳晌,等同于:

String getValue(String s){
    return s.toUpperCase();
}

再舉個??鲫尊,使用JAVA自帶的幾何類實現(xiàn)內(nèi)容比較:

import java.util.Arrays;
import java.util.Collections;
import java.util.List;

public List<Employee> employees = Arrays.asList(
            new Employee(101,18,"張三", 9999.99),
            new Employee(102,59,"理司", 3333.4),
            new Employee(103,18,"王五", 7777.7),
            new Employee(104,8,"趙六", 6665.3),
            new Employee(105,38,"天切", 5555)
    );

    @Test
    public void compare(){
        //如果員工年齡相等則使用姓名按字典順序排序,最后輸出排序結(jié)果
        Collections.sort(employees,(e1, e2)->{
            int result = (e1.getAge()==e2.getAge())? e1.getName().compareTo(e2.getName()):Integer.compare(e1.getAge(),e2.getAge());
            return result;
        });
        for(Employee employee:employees){
            System.out.println(employee);
        }
    }

Collections類有一個排序方法沦偎,其方法簽名如下:

 public static <T> void sort(List<T> list, Comparator<? super T> c) {
        list.sort(c);
    }

sort方法的第二個參數(shù)疫向,是一個接口Comparator咳蔚,該接口有個compare方法:

int compare(T o1, T o2);

sort方法的實現(xiàn):

default void sort(Comparator<? super E> c) {
        Object[] a = this.toArray();
        Arrays.sort(a, (Comparator) c);
        ListIterator<E> i = this.listIterator();
        for (Object e : a) {
            i.next();
            i.set((E) e);
        }
    }

Employee代碼:

package com.learn.noel.jdk8feature;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

/**
 * @Description
 * @Author noel
 * @Date 2021/12/28
 * Version 1.0
 **/
@AllArgsConstructor
@NoArgsConstructor
@Data
public class Employee {

    int number;
    int age;
    String name;
    double salary;
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市搔驼,隨后出現(xiàn)的幾起案子谈火,更是在濱河造成了極大的恐慌,老刑警劉巖匙奴,帶你破解...
    沈念sama閱讀 218,858評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異妄荔,居然都是意外死亡泼菌,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,372評論 3 395
  • 文/潘曉璐 我一進(jìn)店門啦租,熙熙樓的掌柜王于貴愁眉苦臉地迎上來哗伯,“玉大人,你說我怎么就攤上這事篷角『干玻” “怎么了?”我有些...
    開封第一講書人閱讀 165,282評論 0 356
  • 文/不壞的土叔 我叫張陵恳蹲,是天一觀的道長虐块。 經(jīng)常有香客問我,道長嘉蕾,這世上最難降的妖魔是什么贺奠? 我笑而不...
    開封第一講書人閱讀 58,842評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮错忱,結(jié)果婚禮上儡率,老公的妹妹穿的比我還像新娘。我一直安慰自己以清,他們只是感情好儿普,可當(dāng)我...
    茶點故事閱讀 67,857評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著掷倔,像睡著了一般眉孩。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上勒葱,一...
    開封第一講書人閱讀 51,679評論 1 305
  • 那天勺像,我揣著相機(jī)與錄音,去河邊找鬼错森。 笑死吟宦,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的涩维。 我是一名探鬼主播殃姓,決...
    沈念sama閱讀 40,406評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼袁波,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了蜗侈?” 一聲冷哼從身側(cè)響起篷牌,我...
    開封第一講書人閱讀 39,311評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎踏幻,沒想到半個月后枷颊,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,767評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡该面,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,945評論 3 336
  • 正文 我和宋清朗相戀三年夭苗,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片隔缀。...
    茶點故事閱讀 40,090評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡题造,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出猾瘸,到底是詐尸還是另有隱情界赔,我是刑警寧澤,帶...
    沈念sama閱讀 35,785評論 5 346
  • 正文 年R本政府宣布牵触,位于F島的核電站淮悼,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏揽思。R本人自食惡果不足惜敛惊,卻給世界環(huán)境...
    茶點故事閱讀 41,420評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望绰更。 院中可真熱鬧瞧挤,春花似錦、人聲如沸儡湾。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,988評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽徐钠。三九已至癌刽,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間尝丐,已是汗流浹背显拜。 一陣腳步聲響...
    開封第一講書人閱讀 33,101評論 1 271
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留爹袁,地道東北人远荠。 一個月前我還...
    沈念sama閱讀 48,298評論 3 372
  • 正文 我出身青樓,卻偏偏與公主長得像失息,于是被迫代替她去往敵國和親譬淳。 傳聞我的和親對象是個殘疾皇子档址,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,033評論 2 355

推薦閱讀更多精彩內(nèi)容