<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          java8 Lambda表達式的使用總結

          共 3337字,需瀏覽 7分鐘

           ·

          2020-11-07 15:10


          簡介:


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


          案例:


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


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


          首先我們先在單元測試內寫出我們的原始代碼:

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


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


          給出初始單元測試,實現Run接口的匿名實現類


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


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


          使用lambda表達式時可寫成:


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


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


          首先是接口:


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


          匿名實現類:


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


          lambda表達式:


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


          還可直接將數據類型省略,因為可以由編譯器推斷得出,稱為“類型推斷”


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


          只有一個參數時,可省略小括號:


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


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


          還是那個接口,在其方法中加入兩個參數


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


          其原匿名實現類:


          @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表達式:


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


          還可直接將數據類型省略,因為可以由編譯器推斷得出,稱為“類型推斷”


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


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


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

          比較傳入的兩個數的大小


          @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);
          ??}


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


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


          格式五:多參,多條語句


          匿名實現類:


          @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表達式:


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


          總結:


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

          2)格式:


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


          3)


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


          4)lambda的本質:作為接口的實例。


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




          瀏覽 46
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  成人狼友网址 | 欧美一级免费A片 | 99高清免费视频 | 日本18禁黄网站 | 91福利免费观看 |