方法引用與構(gòu)造器引用

一秸弛、方法引用

1、什么是方法引用

當(dāng)要傳遞給Lambda體的操作搪搏,已經(jīng)有實(shí)現(xiàn)的方法狭握,可以使用方法引用。(實(shí)現(xiàn)抽象方法的參數(shù)列表疯溺,必須與方法引用方法的參數(shù)列表保持一致)

(可以將方法引用理解為 Lambda 表達(dá)式的另外一種表現(xiàn)形式)

方法引用:使用操作符“::”將方法名和對象或類的名字分隔開來论颅。

如下三種主要使用情況:

  1. 對象的引用 :: 實(shí)例方法名

  2. 類名 :: 靜態(tài)方法名

  3. 類名 :: 實(shí)例方法名

    注意:

    ①方法引用所引用的方法的參數(shù)列表與返回值類型,需要與函數(shù)式接口中抽象方法的參數(shù)列表和返回值類型保持一致囱嫩!

    ②若Lambda 的參數(shù)列表的第一個(gè)參數(shù)恃疯,是實(shí)例方法的調(diào)用者,第二個(gè)參數(shù)(或無參)是實(shí)例方法的參數(shù)時(shí)墨闲,格式: ClassName::MethodName

2今妄、方法引用舉例
(1)、對象的引用 :: 實(shí)例方法名
// 1. 對象的引用 :: 實(shí)例方法名
    @Test
    public void test() {
        // ①方法引用所引用的方法的參數(shù)列表與返回值類型鸳碧,需要與函數(shù)式接口中抽象方法的參數(shù)列表和返回值類型保持一致盾鳞!
        Consumer<String> con = (x) -> System.out.println(x);
        con.accept("hello");

        PrintStream ps = System.out;
        Consumer<String> con2 = (x) -> ps.println(x);
        con2.accept("hello");

        // 對象的引用 :: 實(shí)例方法名
        PrintStream ps2 = System.out;
        Consumer<String> con3 = ps2::println;
        con3.accept("hello");

    }

    @Test
    public void test2() {
        Employee emp = new Employee();

        Supplier<String> sup = () -> emp.getName();
        String str = sup.get();
        System.out.println(str);

        // 對象的引用 :: 實(shí)例方法名
        Supplier<Integer> sup2 = emp::getAge;
        Integer num = sup2.get();
        System.out.println(num);
    }
(2)、類名 :: 靜態(tài)方法名
// 2. 類名 :: 靜態(tài)方法名
    @Test
    public void test3() {

        Comparator<Integer> com = (x, y) -> Integer.compare(x, y);
        // int compare = com.compare(2, 3);
        // System.out.println(compare);

        // 類名 :: 靜態(tài)方法名
        Comparator<Integer> com2 = Integer::compare;
    }
(3)瞻离、類名 :: 實(shí)例方法名
// 3. 類名 :: 實(shí)例方法名
    @Test
    public void test4() {
        BiPredicate<String, String> bp = (x, y) -> x.equals(y);
        // 使用要求: 若Lambda 的參數(shù)列表的第一個(gè)參數(shù)腾仅,是實(shí)例方法的調(diào)用者,第二個(gè)參數(shù)(或無參)是實(shí)例方法的參數(shù)時(shí)套利,格式:
        // ClassName::MethodName
        BiPredicate<String, String> bp2 = String::equals;
        // boolean test = bp2.test("hello", "hello");
        // System.out.println(test);
    }
    
        
    }

二推励、構(gòu)造器引用

1、什么是構(gòu)造器引用
格式:ClassName::new

與函數(shù)式接口相結(jié)合日裙,自動與函數(shù)式接口中方法兼容吹艇。可以把構(gòu)造器引用賦值給定義的方法昂拂,與構(gòu)造器參數(shù)列表要與接口中抽象方法的參數(shù)列表一致受神!

2、構(gòu)造器引用的例子
    
    //二格侯、構(gòu)造器引用 :構(gòu)造器的參數(shù)列表鼻听,需要與函數(shù)式接口中參數(shù)列表保持一致财著!
     //1. 類名 :: new
    //ClassName::new
    //注意:需要調(diào)用的構(gòu)造器的參數(shù)列表要與函數(shù)式接口中抽象方法的參數(shù)列表保持一致、
    @Test
    public void test5() {
        Supplier<Employee> sup =()->new Employee();
        
        //構(gòu)造器引用方式
        Supplier<Employee> sup2=Employee::new;
        Employee emp=sup2.get();
        System.out.println(emp);
    }
    @Test
    public void test6() {
        Function<Integer,Employee> fun=(x)->new Employee(x);
        
        Function<Integer,Employee> fun2=Employee::new;
        Employee emp=fun2.apply(101);
        System.out.println(emp);
        //需要調(diào)用的構(gòu)造器的參數(shù)列表要與函數(shù)式接口中抽象方法的參數(shù)列表保持一致撑碴、
        //這里的參數(shù)列表撑教,就對應(yīng)employee的構(gòu)造器的列表一樣
        BiFunction<Integer,Integer,Employee> bif=Employee::new;
        Employee apply = bif.apply(2, 3);
        System.out.println(apply);
        
    }

三、數(shù)組引用

1醉拓、數(shù)組引用格式

格式:type[]::new

2伟姐、數(shù)組引用例子
//數(shù)組引用
    //三、數(shù)組引用
    //類型[] :: new;
    @Test
    public void test7() {
        Function<Integer,String[]> fun=(x)->new String[x];
        String[] apply = fun.apply(10);
        System.out.println(apply.length);
        
        
        Function<Integer,String[]> fun2=String[]::new;
        String[] apply2 = fun2.apply(10);
        System.out.println(apply2.length);
    }
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末亿卤,一起剝皮案震驚了整個(gè)濱河市愤兵,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌排吴,老刑警劉巖秆乳,帶你破解...
    沈念sama閱讀 216,324評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異钻哩,居然都是意外死亡屹堰,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,356評論 3 392
  • 文/潘曉璐 我一進(jìn)店門街氢,熙熙樓的掌柜王于貴愁眉苦臉地迎上來扯键,“玉大人,你說我怎么就攤上這事阳仔∮桥悖” “怎么了?”我有些...
    開封第一講書人閱讀 162,328評論 0 353
  • 文/不壞的土叔 我叫張陵近范,是天一觀的道長嘶摊。 經(jīng)常有香客問我,道長评矩,這世上最難降的妖魔是什么叶堆? 我笑而不...
    開封第一講書人閱讀 58,147評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮斥杜,結(jié)果婚禮上虱颗,老公的妹妹穿的比我還像新娘。我一直安慰自己蔗喂,他們只是感情好忘渔,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,160評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著缰儿,像睡著了一般畦粮。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,115評論 1 296
  • 那天宣赔,我揣著相機(jī)與錄音预麸,去河邊找鬼。 笑死儒将,一個(gè)胖子當(dāng)著我的面吹牛吏祸,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播钩蚊,決...
    沈念sama閱讀 40,025評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼贡翘,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了两疚?” 一聲冷哼從身側(cè)響起床估,我...
    開封第一講書人閱讀 38,867評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎诱渤,沒想到半個(gè)月后础锐,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體如贷,經(jīng)...
    沈念sama閱讀 45,307評論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,528評論 2 332
  • 正文 我和宋清朗相戀三年霎烙,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了碑韵。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片赡茸。...
    茶點(diǎn)故事閱讀 39,688評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖祝闻,靈堂內(nèi)的尸體忽然破棺而出占卧,到底是詐尸還是另有隱情,我是刑警寧澤联喘,帶...
    沈念sama閱讀 35,409評論 5 343
  • 正文 年R本政府宣布华蜒,位于F島的核電站,受9級特大地震影響豁遭,放射性物質(zhì)發(fā)生泄漏叭喜。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,001評論 3 325
  • 文/蒙蒙 一蓖谢、第九天 我趴在偏房一處隱蔽的房頂上張望捂蕴。 院中可真熱鬧,春花似錦闪幽、人聲如沸啥辨。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,657評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽溉知。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間着倾,已是汗流浹背拾酝。 一陣腳步聲響...
    開封第一講書人閱讀 32,811評論 1 268
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留卡者,地道東北人蒿囤。 一個(gè)月前我還...
    沈念sama閱讀 47,685評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像崇决,于是被迫代替她去往敵國和親材诽。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,573評論 2 353

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