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


如果用方法引用(调用类中静态方法)的话就可以写成:


@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题只有一条执行语句,那么可以省略{}


4)lambda的本质:作为接口的实例。


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




浏览 18
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报