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语句.同时这个转换过程比较复杂,所以下面详细讲解一下思路和这个类的作用. ...
随机推荐
- 【AMAD]django-filter -- 一个通用的,基于用户选择的Django Queryset 过滤系统
简介 用法 和DRF集成 个人评分 简介 django-filter1可以通过URL的query string参数,动态对Queryset进行过滤. 用法 import django_filters ...
- 在VMware上安装centos
Windows,VMware和Centos三者的关系 VMware安装.centos安装 在 VMware 上安装 CentOS 第 1 步:打开 VMware,点击创建新的虚拟机 第 2 步:选择典 ...
- 快速查看表结构 SQL server查看表注释以及字段注释表结构字段说明
DECLARE @tableName NVARCHAR(MAX);SET @tableName = N'UserIntegralExchange'; --表名!!! SELECT CASE WHE ...
- 使用pycharm开发web——django2.1.5(五)表单和通用视图
看了刘江老师教程这么多天,卧槽,我才发现他也曾跻身于行伍之间,interesting 刘老师这波讲解很到位,告诉你如何编写单例视图的时候忽然告诉你,其实不用这么麻烦,我们有通用视图,那些总是要做相似的 ...
- jenkins持续集成(svn+maven)
一.初始化环境 1.系统管理->插件管理 安装插件 Maven Integration 2.系统管理->全局工具配置 配置jdk.maven 二.项目配置1.源码配置 (使用之前搭建的sv ...
- 【AtCoder】AGC011
AGC011 A - Airport Bus 大意:有N个人,每个人只能在\([T_i,T_i +K]\)这段区间乘车,每辆车安排C人,问最少安排几辆车 直接扫,遇到一个没有车的在\(T_i +K\) ...
- SpringBoot或者SpringMVC 临时取消配置的视图页面的前后缀
// 重定向到新的jsp页面return "redirect:/index.jsp"; // 请求转发到新的jsp页面 return "forward:/index.js ...
- (二十八)动态盐的MD5加密算法(java实现)
目录 文章目录 @[toc] 源代码: 函数用法讲解: 用法代码实例: 对比普通 **`MD5`** 的优点 实现思路: 后来我发现,BCryptPasswordEncoder 是这个思路的实现的最优 ...
- 剑指offer40:一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字
1 题目描述 一个整型数组里除了两个数字之外,其他的数字都出现了两次.请写程序找出这两个只出现一次的数字. 2 思路和方法 (1)异或:除了有两个数字只出现了一次,其他数字都出现了两次.异或运算中,任 ...
- 最新精仿Chinaz中国站长网整站源码带全部数据带采集功能
用范围: 站长网源码演示地址:php源码运行环境: phpChinaz站长网对于广大站长来说,是不会陌生的,现在几乎成为了每个站长都必须上的网站了.这次分享的是Chinaz站长网的源码,包含了chi ...