Lambda使用深入解析
这一次继续对Lambda表达式进行深入,因为它实在太重要了,这次会涉及到java.util.function中的一些新的FunctionalInterface的使用,用它来进一步巩固对Lambda表达式的理解。
进一步理解FunctionalInterface:
在java8开篇中就已经对什么是functionalinterface已经做了初步阐述:有唯一一个抽象方法,也可以包含static和default的方法实现,像这样的接口就是具有functional的接口,贴上之前的图复习下:

这里再来编码写几种形式来对它进行进一步认识:


验证它是不是很简单,直接加上Annotation注解就知道啦:

因为这个SmartAdder类有两个抽象方法:一个是父类的int参数的add,还有一个是自身long参数的add,而它不符合只能有一个抽象方法的规定,所以就不是喽。


对于上面的概念再复习一下,比较简单。
演练java.util.function的Function加深对Lambda的学习的意义:
在使用系统Function类之前,先来复习一下如何去使用Lambda表达式,以Runnable为例:


编译运行:

其实编译器对于匿名的内部类如果支持Lambda表达式会有提醒,如下:

好了,简单复习之后,下面就正式开始去使用JDK8中提供的非常常用的Function的接口,为之后JAVA8中的Streams学习做下铺垫,重在体会Lambda表达式的意义。
①、Predicate
也就是传入一个值,最终返回的是一个boolean类型,这里还是以之前过滤苹果为例:

编译运行:

在JAVA8有很多跟它类似的类,用法基本差不多,只是可能参数个数或者参数类型不太一样,比如:




基本是一通百通的,所以这里再用一下它的其它类似的类:

编译运行:

下面再来用一下二个参数的Predicate,如下:

编译运行:

②、Consumer

下面看如何使用?

编译运行:

同样的,也有类似的Function,下面也针对性的使用一下,基于上雷同,比较容易:


编译运行:

③、Function

也就是传入参数T,返回参数R,下面来使用一下:

编译运行:

【提示】;貌似在RXJAVA中大量使用到了它,原来它的出处还是在JAVA8的基础之上。
同样的也是很多类似的Function,下面也对其进行使用一下:


输出:



输出:

④、Supplier

输出:

呃,不就是new了一个apple么,那用这个Supplier有啥意义呢,还整这么麻烦,这个在之后的方法推导中会发现它的用处,这里先提前感受一下:


呃~~~这语法好像c++的域访问符,这就是之后要学习的方法推导,这里先有个印象。
小细节:匿名内部类和Lambda表达式body访问变量的问题:

如果说:

我们知道对于匿名内部类访问外的变量必须是final类型的,这在android中大量使用到,而如果i++,则说明变量不是final类型,所以内部类的使用时就报错了,
而Lambda表达式也是一个匿名的内部类,所以也有同样的特点:


小小细节,体会以下既可。
Lambda使用深入解析的更多相关文章
- Lambda表达式树解析(下)
概述 前面章节,总结了Lambda树的构建,那么怎么解析Lambda表达式树那?Lambda表达式是一种委托构造而成,如果能够清晰的解析Lambda表达式树,那么就能够理解Lambda表达式要传递的正 ...
- Lambda表达式树解析(下)包含自定义的provider和查询
概述 前面章节,总结了Lambda树的构建,那么怎么解析Lambda表达式树那?Lambda表达式是一种委托构造而成,如果能够清晰的解析Lambda表达式树,那么就能够理解Lambda表达式要传递的正 ...
- Python filter,map,lambda,reduce,列表解析
filter用法 filter(func,seq) 将seq的元素逐一代入func,通过func的返回值来判断是保留还是过滤 >>> def foo(x): return x> ...
- 今夜我懂了Lambda表达式_解析
现在时间午夜十一点~ 此刻的我血脉喷张,异常兴奋:因为专注得学习了一把java,在深入集合的过程中发现好多套路配合Lambda表达式真的是搜椅子,so开了个分支,决定从"只认得", ...
- python lambda函数详细解析(面试经常遇到)
1 作用:通常是用来在python中创建匿名函数的 2 格式: lambda 参数[,参数] : 表达式 3 注意: (1)lambda定义的是单行函数, 如果需要复杂的函数,应该定义普通函数 (2) ...
- Python 中Lambda 表达式 实例解析
Lambda 表达式 lambda表达式是一种简洁格式的函数.该表达式不是正常的函数结构,而是属于表达式的类型.而且它可以调用其它函数. 1.基本格式: lambda 参数,参数...:函数功能代码 ...
- C++11 Lambda表达式简单解析
C++11 新增了非常多特性,lambda 表达式是当中之中的一个.假设你想了解的 C++11 完整特性, 建议去http://www.open-std.org/看看新标准! 非常多语言都提供了 la ...
- lambda表达式使用解析
1.Predicate/Consumer/Function/Supplier介绍 Predicate boolean test(T t); Consumer accpet(T t); Function ...
- SqlHelper简单实现(通过Expression和反射)5.Lambda表达式解析类
这个ExpressionHelper类,是整个SqlHelper中,最核心的一个类,主要功能就是将Lambda表达式转换为Sql语句.同时这个转换过程比较复杂,所以下面详细讲解一下思路和这个类的作用. ...
随机推荐
- Git常用命令速查表,新手必备版本控制
Git 跟 SVN 一样,都是用于管理代码的版本控制工具.无论在项目中,我们负责哪一块,只要需要编写代码,就必须熟悉Git(依公司要求而定). 当然,用的越熟练,处理的项目越顺利,离出任CTO.迎娶白 ...
- Note 1: Good
Note 1: Good 1. The collection of Linkun's [1]: 1.1coolJoy says "cool" when he heard that ...
- Want To Become A Web Design Expert? Read This Piece
Want To Become A Web Design Expert? Read This Piece It can be very expensive to hire a web design fi ...
- PCM-FTL
1. 运行时第一行需要是write 错误位置 trace_stat->sectors += length;
- axios设置请求头内容
axios设置请求头中的Authorization 和 cookie 信息: GET请求 axios.get(urlString, { headers: { 'Authorization': 'Bea ...
- 一个包含python和java环境的dockerfile
现在一个项目中遇到python调用java的jar包的环境.为了方便发布,编写了这个dockerfile,作为基础镜像. #this docker file is used to build runt ...
- Hello TypeScript
⒈TypeScript简介 1.JavaScript的超集 2.支持ECMAScript6标准,并支持输出ECMAScript3/5/6标准的纯JavaScript代码 3.支持ECMAScript未 ...
- 整体二分(模板二)动态区间第K大
这才是更一般的二分写法--HDU5412 #define IOS ios_base::sync_with_stdio(0); cin.tie(0); #include <cstdio>// ...
- 【广搜】Knight Moves
题目描述 Mr Somurolov, fabulous chess-gamer indeed, asserts that no one else but him can move knights fr ...
- RabbitMQ安装&简单使用
.什么是RabbitMQ.详见 http://www.rabbitmq.com/. 作用就是提高系统的并发性,将一些不需要及时响应客户端且占用较多资源的操作,放入队列,再由另外一个线程,去异步处理这些 ...