Lambda表达式

Lambda表达式作为Java8引入的一个重大特性,主要用来解决行为参数化的问题,一定程度上类似于策略设计模式;
一:Lambda表达式和接口式编程的策略模式的区别
1.Lambda表达式是在接口式编程的基础上,更加抽象了一层,一个Lambda表达式对应一个函数式接口;
2.Lambda表达式对应的interface,必须只能有一个方法(default除外),而接口式编程可以有多个方法。
二:Lambda的定义

Lambda的定义

三:使用Lambda的地方:需要函数式接口的地方
1.函数式接口就是只定义一个抽象方法的接口,接口现在还可以拥有默认方法(即在类没有对方法进行实现时, 其主体为方法提供默认实现的方法)。哪怕有很多默认方法,只要接口只定义了一个抽象 方法,它就仍然是一个函数式接口。
2.实现:Lambda表达式允许你直接以内联的形式为函数式接口的抽象,方法提供实现,并把整个表达式作为函数式接口的实例,即Lambda被抽象成一个函数式接口;
3.常用的函数式接口
Predicate T->boolean
Consumer T->void
Function<T,R> T->R
Supplier () ->T
UnaryOperator T->T
BinaryOperator (T,T)->T
BiPredicate<L,R> (L,R)->boolean
BiConsumer<T,U> (T,U)->void
BiFunction<T,U,R> (T,U)->R
函数描述符

三:类型检查、类型推断
1.类型检查是Java编译器用来判别Lambda表达式是否合法的方式,Lambda的类型是从使用Lambda的上下文推断出来的,Java编译器会从上下文(目标类型)推断出用什么函数式接 口来配合Lambda表达式。

四:Lambda的限制
1.使用局部变量:Lambda表达式引用的局 部变量必须是最终的(final) 或事实上最终的,实例变量都存储在堆中,而局部变量则保存在栈上。如果Lambda可以直接访问局 部变量,而且Lambda是在一个线程中使用的,则使用Lambda的线程,可能会在分配该变量的线 程将这个变量收回之后,去访问该变量。因此,Java在访问自由局部变量时,实际上是在访问它 的副本,而不是访问原始变量。如果局部变量仅仅赋值一次那就没有什么区别了

五:Lambda编程实例:
1.目标:一个处理下层返回的通用函数,包括正常逻辑、数据异常和下层异常的处理;需要使用Lambda的行为参数化,将对三种情况的处理作为参数传递;
2.该函数设计为:
主方法:传递三个参数,result、正常的Handler、数据异常的Handler、下层响应异常的Handler,然后根据不同的场景分别定义不同的行为来处理底层的返回。
Handler:作为函数式接口用来承载Lambda表达式,来处理下层数据;
3.主函数实现:

public void dealBody(AsyncResult result, Handler bodyExtractor, Handler incorrectDataHandler,
        Handler failureHandler) {
    if (ar.succeeded()) {
        try {
            bodyExtractor.handle(body);
        } catch (Exception e) {
            log.error("Response data error");
            incorrectDataHandler.handle(body);
        }
    } else {
        log.error("Response call back error");
        failureHandler.handle(body);
    }
}

4.函数式接口Handler的实现

 @FunctionalInterface
public interface Handler<E> {
    void handle(E var1);
}

5.使用

dealBody(result , result -> result.response().write("success")
, result ->result.response().write("data error")
, result -> result.response.write("invoked exception"));
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值