1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        java8 Lambda表達(dá)式的使用總結(jié)

        共 3337字,需瀏覽 7分鐘

         ·

        2020-11-07 15:10


        簡介:


        Lambda是一個(gè)匿名函數(shù),我們可以把Lambda表達(dá)式理解為是一段可以傳遞的代碼(將代碼像數(shù)據(jù)一樣進(jìn)行傳遞)。使用它可以寫出更簡潔,更靈活的代碼。


        案例:


        話不多說,直接先看例子:


        語法格式一:無參,無返回值


        首先我們先在單元測(cè)試內(nèi)寫出我們的原始代碼:

        定義一個(gè)Run接口,里面只有一running(無參)方法


        interface?Run{
        ??void?running();
        }


        給出初始單元測(cè)試,實(shí)現(xiàn)Run接口的匿名實(shí)現(xiàn)類


        @Test
        ??public?void?test01()?{
        ????Run runner=new?Run() {
        ??????@Override
        ??????public?void?running()?{
        ????????System.out.println("人類會(huì)跑步");
        ??????}
        ????};
        ????runner.running();
        ??}


        下面便是lambda表達(dá)式的使用(打印結(jié)果皆是一致):


        使用lambda表達(dá)式時(shí)可寫成:


        @Test
        ??public void test02() {
        ????Run runner=()->System.out.println("人類會(huì)跑步");
        ????runner.running();
        ??}


        語法格式二:有一參,無返回值


        首先是接口:


        interface?Run{
        ??void?running(String name);
        }


        匿名實(shí)現(xiàn)類:


        @Test
        ??public?void?test07()?{
        ????Run runner=new?Run() {
        ??????@Override
        ??????public?void?running(String name)?{
        ????????System.out.println(name+"能跑步");
        ??????}
        ????};
        ????runner.running("小邱");
        ??}


        lambda表達(dá)式:


        @Test
        ??public void test08() {
        ????Run runner=(String name)->System.out.println(name+"能跑步");
        ????runner.running("小邱");
        ??}


        還可直接將數(shù)據(jù)類型省略,因?yàn)榭梢杂删幾g器推斷得出,稱為“類型推斷”


        @Test
        ??public void test08() {
        ????Run runner=(name)->System.out.println(name+"能跑步");
        ????runner.running("小邱");
        ??}


        只有一個(gè)參數(shù)時(shí),可省略小括號(hào):


        @Test
        ??public?void?test09()
        {
        ????Run runner=name->System.out.println(name+"能跑步");
        ????runner.running("小邱");
        ??}


        語法格式三:有兩參,無返回值


        還是那個(gè)接口,在其方法中加入兩個(gè)參數(shù)


        interface?Run{
        ??void?running(String name,int?distance);
        }


        其原匿名實(shí)現(xiàn)類:


        @Test
        ??public?void?test01()?{
        ????Run runner=new?Run() {
        ??????@Override
        ??????public?void?running(String name,int?distance)?{
        ????????System.out.println(name+"能跑"+distance+"公里");
        ??????}
        ????};
        ????runner.running("小邱",100);
        ??}


        使用lambda表達(dá)式:


        @Test
        ??public?void?test06()
        {
        ????Run runner=(String name,int?distance)->System.out.println(name+"能跑"+distance+"公里");
        ????runner.running("小邱",100);
        ??}


        還可直接將數(shù)據(jù)類型省略,因?yàn)榭梢杂删幾g器推斷得出,稱為“類型推斷”


        @Test
        ??public void test02() {
        ????Run runner=(name,distance)->System.out.println(name+"能跑"+distance+"公里");
        ????runner.running("小邱",100);
        ??}


        格式四:有兩參,有返回值


        這里我們使用java中的Comparator接口來作為例子:

        比較傳入的兩個(gè)數(shù)的大小


        @Test
        ??public?void?test03()?{
        ????Comparator com1=new?Comparator() {
        ??????@Override
        ??????public?int?compare(Integer o1, Integer o2)?{
        ????????return?Integer.compare(o1, o2);
        ??????}
        ????};
        ????int?compare1=com1.compare(10, 20);
        ????System.out.println(compare1);
        ??}


        按照格式二中的寫法便可以寫成:


        @Test
        ??public?void?test04()
        {
        ????Comparator com1=(o1,o2)->Integer.compare(o1, o2);
        ????int?compare1=com1.compare(10, 20);
        ????System.out.println(compare1);
        ??}


        如果用方法引用(調(diào)用類中靜態(tài)方法)的話就可以寫成:


        @Test
        ??public?void?test05()?{
        ????Comparator com1=Integer::compare;
        ????int?compare1=com1.compare(10, 20);
        ????System.out.println(compare1);
        ??}


        格式五:多參,多條語句


        匿名實(shí)現(xiàn)類:


        @Test
        ??public?void?test07()
        {
        ????Comparator com1=new?Comparator() {
        ??????@Override
        ??????public?int?compare(Integer o1, Integer o2)
        {
        ????????System.out.println(o1);
        ????????System.out.println(o2);
        ????????return?o1.compareTo(o2);
        ??????}
        ????};
        ??}


        lambda表達(dá)式:


        @Test
        ??public?void?test08()
        {
        ????Comparator com1=(o1,o2)->{
        ??????System.out.println(o1);
        ??????System.out.println(o2);
        ??????return?o1.compareTo(o2);
        ????};
        ??}


        總結(jié):


        1)舉例:(o1,o2)->Integer.compare(o1,o2);

        2)格式:


        “->”:lambda操作符 或 箭頭操作符
        "->"左邊:lambda形參列表(就是接口中的抽象方法的形參列表)
        "->"右邊:lambda體(就是重寫的抽象方法的方法體)


        3)


        ->左邊:lambda形參列表的參數(shù)類型可以省略(類型推斷):如果lambda形參列表只有一個(gè)參數(shù),其小括號(hào)也可以省略。
        ->右邊:lambda體應(yīng)該由一對(duì){}包裹,如果lambda題只有一條執(zhí)行語句,那么可以省略{}


        4)lambda的本質(zhì):作為接口的實(shí)例。


        原文鏈接:csdn.net/qq_45273552/article/details/109296786




        瀏覽 46
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        評(píng)論
        圖片
        表情
        推薦
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            国产精品视频熟女 | 北条麻妃黄色视频免费播放 | 成人三级网址 | 大香蕉伊人在线观看视频 | 性生交大片免费1 | 综合色伊人 | 成人综合福利视频 | 国国产a国产片免费 | 日本人三级三妇少电影 | 成人电影一区二区三区在线观看 |