这一次继续对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使用深入解析的更多相关文章

  1. Lambda表达式树解析(下)

    概述 前面章节,总结了Lambda树的构建,那么怎么解析Lambda表达式树那?Lambda表达式是一种委托构造而成,如果能够清晰的解析Lambda表达式树,那么就能够理解Lambda表达式要传递的正 ...

  2. Lambda表达式树解析(下)包含自定义的provider和查询

    概述 前面章节,总结了Lambda树的构建,那么怎么解析Lambda表达式树那?Lambda表达式是一种委托构造而成,如果能够清晰的解析Lambda表达式树,那么就能够理解Lambda表达式要传递的正 ...

  3. Python filter,map,lambda,reduce,列表解析

    filter用法 filter(func,seq) 将seq的元素逐一代入func,通过func的返回值来判断是保留还是过滤 >>> def foo(x): return x> ...

  4. 今夜我懂了Lambda表达式_解析

    现在时间午夜十一点~ 此刻的我血脉喷张,异常兴奋:因为专注得学习了一把java,在深入集合的过程中发现好多套路配合Lambda表达式真的是搜椅子,so开了个分支,决定从"只认得", ...

  5. python lambda函数详细解析(面试经常遇到)

    1 作用:通常是用来在python中创建匿名函数的 2 格式: lambda 参数[,参数] : 表达式 3 注意: (1)lambda定义的是单行函数, 如果需要复杂的函数,应该定义普通函数 (2) ...

  6. Python 中Lambda 表达式 实例解析

    Lambda 表达式 lambda表达式是一种简洁格式的函数.该表达式不是正常的函数结构,而是属于表达式的类型.而且它可以调用其它函数. 1.基本格式: lambda 参数,参数...:函数功能代码 ...

  7. C++11 Lambda表达式简单解析

    C++11 新增了非常多特性,lambda 表达式是当中之中的一个.假设你想了解的 C++11 完整特性, 建议去http://www.open-std.org/看看新标准! 非常多语言都提供了 la ...

  8. lambda表达式使用解析

    1.Predicate/Consumer/Function/Supplier介绍 Predicate boolean test(T t); Consumer accpet(T t); Function ...

  9. SqlHelper简单实现(通过Expression和反射)5.Lambda表达式解析类

    这个ExpressionHelper类,是整个SqlHelper中,最核心的一个类,主要功能就是将Lambda表达式转换为Sql语句.同时这个转换过程比较复杂,所以下面详细讲解一下思路和这个类的作用. ...

随机推荐

  1. Session服务器之Memcached与Redis

    安装Memcached[root@nginx ~]# yum -y install libevent memcached 指定用户大小等信息,工作环境中常指定大小一般为4到8G,此信息测试使用.[ro ...

  2. Android开发环境搭建(studio版)

    1.下载安装JDK 网址:http://www.oracle.com/technetwork/java/javase/downloads/index.html

  3. spring的控制器如何跳转到指定的视图

    1.控制器代码 2.跳转代码 return "greeting"; 引号内为跳转的页面,默认不需要加html

  4. mysql常用引擎

    经常用MySQL数据库,但是,你在用的时候注意过没有,数据库的存储引擎,可能有注意但是并不清楚什么意思,可能根本没注意过这个问题,使用了默认的数据库引擎,当然我之前属于后者,后来成了前者,然后就有了这 ...

  5. 生成SSH秘钥连接github(详细教程)

    第一步.首先,检查下自己之前有没有已经生成: 在开始菜单中打开git下的git bash(当然,在其他目录下打开git bash也是一样的): 然后执行 cd ~/.ssh 第二步.如果能进入到.ss ...

  6. centos7服务搭建常用服务配置之二:Rsync+sersync实现数据实时同步

    目录 1.RSYNC数据备份 1.1 rsync服务简介 1.2 rsync特点和优势 1.3 rysnc运行模式简介 1.4 数据同步方式 2 Rsync实验测试 2.1 实验环境说明 2.2 服务 ...

  7. Java基础语法知识你真的都会吗?

    第一阶段 JAVA基础知识 第二章 Java基础语法知识 在我们开始讲解程序之前,命名规范是我们不得不提的一个话题,虽说命名本应该是自由的,但是仍然有一定的"潜规则",通过你对命名 ...

  8. Oracle数据库连接工具的使用(一)

    一.企业管理器(OEM) 1.介绍 Oracle企业管理器(Oracle Enterprise Manager)简称OEM,是一个基于Java的框架系统,该系统集成了多个组件,为用户提供了一个功能强大 ...

  9. 操作MySQL数据进行记录的随意排序

    说到排序,想必大家都知道MySQL中的“ORDER BY”这个关键词吧,使用它可以实现查询数据根据某一字段(或多个字段)的值排序,那么如何实现数据的任意排序操作呢? 其实这里我所说的“随意排序”,本质 ...

  10. 2.5路由网关:Zuul

    在原有的工程上,创建一个新的工程 创建service-zuul工程 其pom.xml文件如下: <?xml version="1.0" encoding="UTF- ...