Java 8 Lambda表達式常見寫法

接上一篇睡互,lambda表達式的基本邏輯,這次總結(jié)了接種特殊的使用方法陵像。

一、對象::實列方法名

特點:
1寇壳、表達式體調(diào)用的方法醒颖,在接口中已經(jīng)實現(xiàn),不需要再在調(diào)用的時候?qū)崿F(xiàn)。使用此方法;
2顽聂、調(diào)用的方法蹋绽,參數(shù)列表和返回值殃恒,既已經(jīng)實現(xiàn)的方法簽名晒旅,和Lambda表達式一致馏臭;

@Test
    public void test1(){
        Consumer<String> consumer1 = (x)-> System.out.println(x);
        //上面表達式的簡寫如下
        Consumer<String> consumer2 = System.out::println;
        consumer1.accept("This is output sequence");//控制它輸出:This is output sequence
    }

Consumer是Java自帶的接口彻况,是“消費性”接口挺庞,以上代碼的大白話可以翻譯成:接口的accept方法接受一個參數(shù)晰赞,它的據(jù)體實現(xiàn)是打印接收到的那句話。此時可以將參數(shù)省略选侨。該接口部分代碼如下:

@FunctionalInterface
public interface Consumer<T> {

    /**
     * Performs this operation on the given argument.
     *
     * @param t the input argument
     */
    void accept(T t);
}

二掖鱼、類::靜態(tài)方法名

@Test
public void test3(){
    Comparator<Integer> com = (x,y)->Integer.compare(x,y);
    System.out.println(com.compare(20,22));//輸出:-1
    
    Comparator<Integer> compare = Integer::compare;
    System.out.println(compare.compare(20,22));//輸出:-1
}

Comparator接口的“比較”部分代碼如下:

@FunctionalInterface
    public interface Comparator<T> {
        /**
         * Compares its two arguments for order.  Returns a negative integer,
         * zero, or a positive integer as the first argument is less than, equal
         * to, or greater than the second.

         * @param o1 the first object to be compared.
         * @param o2 the second object to be compared.
         * @return a negative integer, zero, or a positive integer as the
         *         first argument is less than, equal to, or greater than the
         *         second.
         * @throws NullPointerException if an argument is null and this
         *         comparator does not permit null arguments
         * @throws ClassCastException if the arguments' types prevent them from
         *         being compared by this comparator.
         */
        int compare(T o1, T o2);
    }

Integer的compare方法定義如下:

public final class Integer extends Number implements Comparable<Integer> {
    public static int compare(int x, int y) {
        return (x < y) ? -1 : ((x == y) ? 0 : 1);
    }
}

三、類::實列方法

@Test
public void test4(){
    BiPredicate<String,String> bp = (x ,y )->x.equals(y);
    //此方法使用限制:
    //x是方法的調(diào)用者援制,y是方法參數(shù)
    BiPredicate<String, String> bp2= String::equals;
    System.out.println(bp2.test("a","ab")); //output: false
}

BiPredicate接口部分代碼如下:

@FunctionalInterface
public interface BiPredicate<T, U> {
/**
* Evaluates this predicate on the given arguments.
*
* @param t the first input argument
* @param u the second input argument
* @return {@code true} if the input arguments match the predicate,
* otherwise {@code false}
*/
boolean test(T t, U u);
}

String.equals()的簽名如下:

public boolean equals(Object anObject) {}

四戏挡、構(gòu)造器引用

格式: classname::new
被調(diào)用的構(gòu)造器的參數(shù)列表,與接口中抽象方法的參數(shù)列表一致晨仑。

@Test
public void test5(){
    //調(diào)用哪種構(gòu)造參數(shù)褐墅,取決于接口,
    //==>> 如Supplier的方法洪己,是無參函數(shù)
    //==>> Function的方法妥凳,接受一個參數(shù),返回一個類型
    //調(diào)用無參構(gòu)造
    Supplier<Employee> emp = ()->new Employee(); //實例化返回一個employee對象
    Supplier<Employee> emp1= Employee::new;
    //調(diào)用码泛,根據(jù)無參構(gòu)造猾封,返回一個對象
    Employee employee = emp.get();

    //調(diào)用一個參數(shù)的構(gòu)造函數(shù)
    Function<Integer, Employee> fun1 = (number)->new Employee(number);
    Function<Integer, Employee> fun2 = Employee::new ;
    //調(diào)用,根據(jù)用戶編號返回用戶
    Employee employeer = fun1.apply(201);
}

Java自帶Supplier接口噪珊,代碼如下:

@FunctionalInterface
public interface Supplier<T> {

    /**
     * Gets a result.
     *
     * @return a result
     */
    T get();
}

Function接口的部分代碼如下:

@FunctionalInterface
public interface Function<T, R> {

    /**
     * Applies this function to the given argument.
     *
     * @param t the function argument
     * @return the function result
     */
    R apply(T t);
}

五晌缘、數(shù)組引用

 @Test
 public void test6(){
     Function<Integer, String[]> fun = (x)->new String[x];
     String[] strings = fun.apply(10);
     System.out.println(strings.length);//輸出10

    Function<Integer, String[]> fun2= String[]::new;
    String[] strings1 = fun2.apply(20);
    System.out.println(strings1.length);//輸出20
}

數(shù)組也是一個對象。

以上五種寫法痢站,歸根結(jié)底磷箕,還是不變的先定義接口,然后定義一個方法阵难,將接口作為形參岳枷,最后使用lambda表達式作為實參傳入方法,實現(xiàn)接口中的方法的具體實現(xiàn)呜叫。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末空繁,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子朱庆,更是在濱河造成了極大的恐慌盛泡,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,378評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件娱颊,死亡現(xiàn)場離奇詭異傲诵,居然都是意外死亡凯砍,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,356評論 2 382
  • 文/潘曉璐 我一進店門拴竹,熙熙樓的掌柜王于貴愁眉苦臉地迎上來悟衩,“玉大人,你說我怎么就攤上這事栓拜∽荆” “怎么了?”我有些...
    開封第一講書人閱讀 152,702評論 0 342
  • 文/不壞的土叔 我叫張陵菱属,是天一觀的道長钳榨。 經(jīng)常有香客問我,道長纽门,這世上最難降的妖魔是什么薛耻? 我笑而不...
    開封第一講書人閱讀 55,259評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮赏陵,結(jié)果婚禮上饼齿,老公的妹妹穿的比我還像新娘。我一直安慰自己蝙搔,他們只是感情好缕溉,可當我...
    茶點故事閱讀 64,263評論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著吃型,像睡著了一般证鸥。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上勤晚,一...
    開封第一講書人閱讀 49,036評論 1 285
  • 那天枉层,我揣著相機與錄音,去河邊找鬼赐写。 笑死鸟蜡,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的挺邀。 我是一名探鬼主播揉忘,決...
    沈念sama閱讀 38,349評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼端铛!你這毒婦竟也來了泣矛?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,979評論 0 259
  • 序言:老撾萬榮一對情侶失蹤禾蚕,失蹤者是張志新(化名)和其女友劉穎乳蓄,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體夕膀,經(jīng)...
    沈念sama閱讀 43,469評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡虚倒,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,938評論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了产舞。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片魂奥。...
    茶點故事閱讀 38,059評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖易猫,靈堂內(nèi)的尸體忽然破棺而出耻煤,到底是詐尸還是另有隱情,我是刑警寧澤准颓,帶...
    沈念sama閱讀 33,703評論 4 323
  • 正文 年R本政府宣布哈蝇,位于F島的核電站,受9級特大地震影響攘已,放射性物質(zhì)發(fā)生泄漏炮赦。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,257評論 3 307
  • 文/蒙蒙 一样勃、第九天 我趴在偏房一處隱蔽的房頂上張望吠勘。 院中可真熱鬧,春花似錦峡眶、人聲如沸剧防。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,262評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽峭拘。三九已至,卻和暖如春狮暑,著一層夾襖步出監(jiān)牢的瞬間鸡挠,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工心例, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留宵凌,地道東北人。 一個月前我還...
    沈念sama閱讀 45,501評論 2 354
  • 正文 我出身青樓止后,卻偏偏與公主長得像瞎惫,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子译株,可洞房花燭夜當晚...
    茶點故事閱讀 42,792評論 2 345

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