<kbd id="5sdj3"></kbd>
<th id="5sdj3"></th>

  • <dd id="5sdj3"><form id="5sdj3"></form></dd>
    <td id="5sdj3"><form id="5sdj3"><big id="5sdj3"></big></form></td><del id="5sdj3"></del>

  • <dd id="5sdj3"></dd>
    <dfn id="5sdj3"></dfn>
  • <th id="5sdj3"></th>
    <tfoot id="5sdj3"><menuitem id="5sdj3"></menuitem></tfoot>

  • <td id="5sdj3"><form id="5sdj3"><menu id="5sdj3"></menu></form></td>
  • <kbd id="5sdj3"><form id="5sdj3"></form></kbd>

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

    共 3337字,需瀏覽 7分鐘

     ·

    2020-11-07 15:10


    簡介:


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


    案例:


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


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


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

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


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


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


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


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


    使用lambda表達式時可寫成:


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


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


    首先是接口:


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


    匿名實現(xiàn)類:


    @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("小邱");
    ??}


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


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


    只有一個參數(shù)時,可省略小括號:


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


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


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


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


    其原匿名實現(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表達式:


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


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


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


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


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

    比較傳入的兩個數(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);
    ??}


    格式五:多參,多條語句


    匿名實現(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表達式:


    @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形參列表只有一個參數(shù),其小括號也可以省略。
    ->右邊:lambda體應該由一對{}包裹,如果lambda題只有一條執(zhí)行語句,那么可以省略{}


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


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




    瀏覽 46
    點贊
    評論
    收藏
    分享

    手機掃一掃分享

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

    手機掃一掃分享

    分享
    舉報

    <kbd id="5sdj3"></kbd>
    <th id="5sdj3"></th>

  • <dd id="5sdj3"><form id="5sdj3"></form></dd>
    <td id="5sdj3"><form id="5sdj3"><big id="5sdj3"></big></form></td><del id="5sdj3"></del>

  • <dd id="5sdj3"></dd>
    <dfn id="5sdj3"></dfn>
  • <th id="5sdj3"></th>
    <tfoot id="5sdj3"><menuitem id="5sdj3"></menuitem></tfoot>

  • <td id="5sdj3"><form id="5sdj3"><menu id="5sdj3"></menu></form></td>
  • <kbd id="5sdj3"><form id="5sdj3"></form></kbd>
    sese97sese | 青青草无码视频免费播放 | 亚洲欧美非洲黄色毛片 | 亚洲三级片在线观看 | 婷婷丁香四虎网 |