Lambda表达式

读书笔记,资料来自Java8 实战

我觉的它是匿名内部类的优化,省略了匿名内部类许多不必要的代码。而更简洁的表达匿名内部类的参数所要实现的功能。它基本上就是没有声明名称的方法,但和匿名类一样,它也可以作为参 数传递给一个方法(传递参数的行为)

一、使用场景

在函数式接口上使用Lambda表达式

二、语法特点

1.简洁:无需像匿名内部类那样写许多模板代码
2.传递:可以作为参数传递
3.语法:它不是一种特定的函数,只是一种特定的写法和条件所组成的函数。

三、语法结构

参数列表:原来匿名内部类中的参数
箭头:指向参数要做的事情
主体:接口方法中具体的实现,因为Lambda表达式只能作用在函数式接口上,主体对应的就是接口方法具体的功能

Lambda表达式_第1张图片
image.png

image.png

四、使用Lambda表达式步骤

1.定义函数式的接口实现功能,即将方法的部分行为使用接口的形式参数化
2.将方法的参数设定位定义好的接口
3.使用Lambda表达式为接口方法传递具体的功能实现

Lambda和内部类的对比
1.使用内部类的方式传递实现,无疑功能会被写死
2.而使用Lambda表示的方式传递实现,可以动态的为process(String name)方法传递它的实现。
对比语法结构:(name)表示需要传递实现的方法的参数列表,箭头指向,该方法具体的实现。

Lambda表达式_第2张图片
image.png

五、使用Java8提供函数描述符

1.接口抽象方法的名字,可以表述Lambda表达式主体所要实现的功能的含义。因此想要表述一些功能就需要定义函数式接口,Java8提供了几个函数式接口,省的我们自己定义接口。

例如OnPorcess接口的process方法的名称描述了name+“ Hello“ 索要表达的含义

**1.Predicate Interface **
做条件判断时可以使用

public interface Predicate{
        boolean test(T t);
 }

2.Consumer Interface
没有返回值,只需要实现具体的功能时可以使用。

@FunctionalInterface
 public interface Consumer{
        void accept(T t);
}

3.Function Interface
有泛型返回值的方法,将一种输入类型转换成类一种类型输出

@FunctionalInterface
    public interface Function{
        R apply(T t);
    }

使用上述三个接口

Lambda表达式_第3张图片
image.png

传入Lambda表达式
Lambda表达式_第4张图片
image.png

**五、如何处理异常
任何Java提供的函数式接口都不能处理异常,如何想要处理异常需要自己定义函数式接口,并抛出异常,或者在执行方法时try-catch住。

你可能感兴趣的:(Lambda表达式)