java学习笔记(27)Lambda表达式

1、函数式编程思想

只要能获取到结果,谁去做的、怎么做的都不重要,只重视结果,不重视过程

2、lambda的标准格式

由三部分组成

参数,箭头,代码

格式

(参数列表) -> {重写方法的代码}

解释

():接口中抽象方法的参数列表,没有参数就空着,多参数用逗号分隔
-> : 传递的意思,把参数传递给方法
{}: 重写接口的抽象方法

3、lambda表达式用途

用于替换使用接口时创建的匿名实现类对象,可以简化代码

4、使用前提

必须有接口,且接口中只有一个抽象方法

必须具有上下文推断

有且只有一个抽象方法的接口呗称为函数式接口

5、使用

无参无返的接口

接口如下

public interface Cook {
    //无参无返
    public abstract void makeFood();
}

测试类中定义一个调用接口抽象方法的方法

public static void invokeCook(Cook cook){
        cook.makeFood();
    }

使用抽象类调用如下

invokeCook(new Cook() {
            @Override
            public void makeFood() {
                System.out.println("吃饭了");
            }
        });

使用lambda表达式调用如下

invokeCook(()->{
            System.out.println("吃饭了");
        });

分析:

lambda调用中整个lambda表达式相当于匿名内部类调用中的匿名对象,只是省去了很多代码,且无需创建匿名对象

案例二,调用Arrays类中的sort方法

//先创建一个名为arr的数组
Arrays.sort(arr,(Person o1,Person o2)->{
            return o1.getAge()-o2.getAge();
        });

arr是sort方法的排序对象,后面的lambda表达式则是传递了一个排序器

案例三,对于有参有返的接口

接口如下

public interface Calculator {
    //计算两个int整数和的方法并返回结束
    public abstract int calc(int a,int b);
}

定义一个使用接口的方法

public static void invokCalc(int a , int b, Calculator c){
        int sum = c.calc(a,b);
        System.out.println(sum);
    }

lambda表达式调用

invokCalc(10,20,(int a,int b)->{
            return a+b;
        });

lambda表达式作为方法的第三个参数,替代了接口的实现类对象

6、lambda表达式的简化

lambda表达式是可推导的,可省略的

凡是根据上下文推导出来的内容,我们都可以省略书写

可省略的内容

  1. 参数列表的数据类型
  2. 参数列表的参数如果只有一个,那么类型和括号都可以省略
  3. {}中的代码如果只有一行,无论时候有返回值,都可以省略{}、return和分号。但这三者必须一起省略

(因为lambda的可推导性才能省略)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值