Lambda表达式

为什么要使用Lambda表达式

Lambda是一个匿名函数,我们可以把Lambda表达式理解为是一段可以传递的代码(将代码像数据一样进行传递)。使用它可以写出更简洁、更灵活的代码。作为一种种更紧凑的代码风格,使Java的语言表达能力得到了提升。

Lambda使用

Lambda的本质: 做为函数式接口的实例

Lambda格式 : (parameters) -> expression 或者(parameters) ->{ statements; }

-> : lambda操作符
parameters :lambda形参列表 (就是接口中的抽象方法的形参列表)
expression : lambda体 (重写抽象方法的方法体)

lambda的使用 (六中情况)

  1. 无参,无返回值
 @Test
    public void test1(){
        //  语法格式一: 无参,无返回值
        Runnable r1=new Runnable()
        {
            @Override
            public void run()
            {
                System.out.println("我爱吃菠菜");
            }
        };

        r1.run();

        System.out.println("****lambda表达式写法****");

        Runnable r2 = () -> {System.out.println("我是一个善良的人类");};

        r2.run();
    }
  1. 需要一个参数,没有返回值
 @Test
    public  void  test2(){
        //  语法格式二:需要一个参数,都是没有返回值
        Consumer<String> c1 =new Consumer<String>()
        {
            @Override
            public void accept(String s)
            {
                System.out.println(s);
            }
        };

        c1.accept("Consumer的使用");

        System.out.println("****lambda表达式写法****");
        Consumer<String> c2 =(String s) -> { System.out.println(s); };
        c2.accept("Consumer的lambda使用");

    }

  1. 数据类型可以省略,因为可有编译器推断得出,我们称为“类型推断”
 @Test
    public  void  test3(){
        //  语法格式二:需要一个参数,都是没有返回值
        Consumer<String> c1 =new Consumer<String>()
        {
            @Override
            public void accept(String s)
            {
                System.out.println(s);
            }
        };

        c1.accept("Consumer的使用");

        System.out.println("****lambda表达式写法****");
        //  类型推断
        Consumer<String> c2 =(s) -> { System.out.println(s); };
        c2.accept("Consumer的lambda使用");

    }
  1. Lampda 若只需要一个参数时,参数的小括号可以省略
@Test
    public void  test4(){
        //语法格式四: Lampda 若只需要一个参数时,参数的小括号可以省略
        Consumer<String> c1 =new Consumer<String>()
        {
            @Override
            public void accept(String s)
            {
                System.out.println(s);
            }
        };

        c1.accept("Consumer的使用");

        System.out.println("****lambda表达式写法****");
        //  类型推断
        Consumer<String> c2 = s -> { System.out.println(s); };
        c2.accept("Consumer的lambda使用");
    }
  1. Lambda 需要两个或以上的参数,多条执行语句,井且可以有返回值
  @Test
    public void test5(){
     //  语法格式五:Lambda 需要两个或以上的参数,多条执行语句,井且可以有返回值
      Comparator<Integer> c1=new Comparator<Integer>()
      {
          @Override
          public int compare(Integer o1, Integer o2)
          {
              System.out.println(o1);
              System.out.println(o2);
              return o1.compareTo(o2);
          }
      };

        int compare = c1.compare(11, 12);
        System.out.println(compare);


        Comparator<Integer> c2=( o1,  o2) -> {
            System.out.println(o1);
            System.out.println(o2);
            return  o1.compareTo(o2);
        };

        int compare2 = c2.compare(22, 21);
        System.out.println(compare2);

    }
  1. 当Lambda体只有一条语句时,return 与大括号若有,都可以省略
 @Test
    public void test6(){
        //  语法格式六:当Lambda体只有一条语句时,return 与大括号若有,都可以省略
        Comparator<Integer> c1=new Comparator<Integer>()
        {
            @Override
            public int compare(Integer o1, Integer o2)
            {
                return o1.compareTo(o2);
            }
        };

        int compare = c1.compare(11, 12);
        System.out.println(compare);


        Comparator<Integer> c2=( o1,  o2) -> o1.compareTo(o2);
        int compare2 = c2.compare(22, 21);
        System.out.println(compare2);

    }

总结
-> 左边:lambda形参列表类型可以省略(类型推断),如果lambda表达式只有一个参数 那么 ()也可以省略
-> 右边:lambda体应该有一对{}包裹,如果lambda体只有一条执行语句 (包括return 语句),其{} 可以省略

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值