Lambda表达式学习

首先什么是Lambda表达式呢?

Lambda是java8的一种新特性,可称为闭包。类似于JavaScript中的闭包。

那闭包是什么呢?

在js中这样解释的:只有函数内部的子函数才能读取局部变量,闭包就是能够读取其他函数内部变量的函数。所以,在本质上,闭包就是将函数内部和函数外部连接起来的一座桥梁。

function A() {
    var n = 123;
    function B() {
    console.log(n);
    }
    return B;
}
var result = A();
result();//返回结果为123

函数B被包括在函数A中,函数B能够读取到函数A的局部变量,而函数A却不能读取到函数B的局部变量。

2. 为什么使用Lambda表达式

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

使用场景:

那什么时候才能使用Lambda式呢?

当然是在匿名内部类中。因为它是简化匿名内部类的代码写法。

格式: 

(匿名内部类被重写方法的形参列表)->{
    被重写方法的方法体代码
}
注:->是语法形式,无实际意义

举个栗子来康康lambd表达式

首先我们先定义一个抽象类,通过匿名内部类重写其方法,再对其进行简化,比较二者之间有何变化

public static void main (String[] args){
    People p = new People(){
    @Override
    public void run(){
        System.out.println("在不加油,你就卷不赢了。");
        }
    };
    p.run();    
 
}
abstract class People{
    public abstract void run();
}

使用Lambda表达式:

People p = ()->{
    System.out.println("小学生跑的很慢");
};
//会出现报错

会出现报错,这是为什么呢?原因在于前面对于Lambda表达式的定义并不清晰,Lambda表达式并不能简化所有匿名内部类,其只能简化函数式接口匿名内部类的写法形式,且接口中有且仅有一个抽象方法,通常,我们会再接口上加上一个@Functionalinterface注解,标记该接口必须是满足函数式接口。
所以我们重新来一遍

@FunctionalInterface//加上这个注解必须是函数式接口,且只有一个抽象方法
interface People{
    void run();
}
//简化之前的匿名内部类
People p = new People(){
    @Override
    public void run(){
        System.out.println("小学生跑的很慢!");
    }
};
//简化之后
People p = () -> {
        System.out.println("小学生跑的很慢!");
};

基础部分

想了解详细的可以去看看这篇文章http://t.csdn.cn/Hn5kf

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值