Java—Lambda基础
虽然JVM有着Scala 、Groovy 、Clojure 等依赖于JVM的函数语式语言,但直到Java8才算是java正式支持函数式编程;
Java8中加入了Lambda的支持标志着Java正式加入了混合式编程语言(支持命令式编程与函数式编程)的行列;像C#、Python都是同时支持两种编程范式,近年来函数式编程愈演愈烈,大有命令式编程向函数式编程靠拢的趋势;
命令式编程与函数式编程的最基本区别在于使用的计算模型的不同,命令式编程是基于图灵机的,而函数式编程使用的是lambda演算; 有了lambda的支持使用Java8可以写出可读性更高的代码,减少代码的繁杂度、传递行为等;
比较
像之前我们实现一个接口的时候可以使用匿名内部类的方式,先看下匿名内部类实现:
Runnable primitive=new Runnable() {
@Override
public void run() {
System.out.println("inner class");
}
};
lambda的实现: Runnable lambda = ()-> System.out.println(" lambda ");
比较两种实现方式lambda的简洁程度是匿名内部类没法比的,lambda实现可以理解为传递行为给Runnable,而匿名内部类则是现实了Runnable接口;
是不是lambda可以代替匿名内部类出现在所有地方呢? 答案不是的。 Lambda只能代替内部类出现在的接口为函数接口(FunctionalInterface)的地方。
语法
lambda语法: () -> {}
1、 ()里面为函数接口的参数,{} 与要传递到函数接口的语句;
2、 lambda方式如果有多条语句还可以用{ 括号括起来;
3、 如只有一条语句则可以省略{},函数接口存在返回值当->后面只有单条语句时return可以省略,如有多条语句则需要显示return返回该值;
函数接口(Functionalnterface):只定义一个抽象方法的接口默认为函数接口,接口中可以有default方法和static方法,也可以使用@FuncationalInterface注解该接口;
简单应用
//实现x+y相加
BinaryOperator<Integer> addOperator = (x, y) -> x+y;
System.out.println(addOperator.apply(3,4));
Java8中除了在Runnable、Comparator等以往存在的接口添加了FuncationalInterface注解外还在java.util.function包中新加入了大批FuncatinalInterface接口;使用java.util.function包下面的接口可以大大简化我们的编程;
参考资料:
《Java8函数式编程》
文章首发地址:Solinx
http://www.solinx.co/archives/382
Java—Lambda基础的更多相关文章
- Java Lambda基础——Function, Consumer, Predicate, Supplier, 及FunctionalInterface接口
这几个接口经常与Lambda结合使用,网上当然也有很多介绍,不过有些过于繁琐,有些又偏简单,秉着实用主义精神,今天这里折中一下,把介绍的内容分为两部分,第一部分相当于TLDR,总结几个"口诀 ...
- 你所不知道的库存超限做法 服务器一般达到多少qps比较好[转] JAVA格物致知基础篇:你所不知道的返回码 深入了解EntityFramework Core 2.1延迟加载(Lazy Loading) EntityFramework 6.x和EntityFramework Core关系映射中导航属性必须是public? 藏在正则表达式里的陷阱 两道面试题,带你解析Java类加载机制
你所不知道的库存超限做法 在互联网企业中,限购的做法,多种多样,有的别出心裁,有的因循守旧,但是种种做法皆想达到的目的,无外乎几种,商品卖的完,系统抗的住,库存不超限.虽然短短数语,却有着说不完,道不 ...
- Java工程师 基础+实战 完整路线图(详解版)
Java工程师 基础+实战 完整路线图(详解版) Java 基础 Java 是一门纯粹的面向对象的编程语言,所以除了基础语法之外,必须得弄懂它的 oop 特性:封装.继承.多态.此外还有泛型.反射 ...
- Java 多线程基础(五)线程同步
Java 多线程基础(五)线程同步 当我们使用多个线程访问同一资源的时候,且多个线程中对资源有写的操作,就容易出现线程安全问题. 要解决上述多线程并发访问一个资源的安全性问题,Java中提供了同步机制 ...
- 思维导图学《On Java》基础卷
说明 原来读过 <Java 编程思想(第 4 版)>,但是这个版本还是基于 Java 5 讲解.由于 Java 8 做出了非常大的改进(是 Java 变化最大的版本),且截止到 2022- ...
- 思维导图学《On Java》基础卷 + 进阶卷
说明 目录 思维导图 导读 第 1 章 什么是对象 第 3 章 一切都是对象 第 6 章 初始化和清理 第 7 章 实现隐藏 第 8 章 复用 第 9 章 多态 第 10 章 接口 第 11 章 内部 ...
- Java以基础类库
Java以基础类库JFC(Java Foundation Class)的形式为程序员提供编程接口API,类库中的类按照用途归属于不同的包中. (一)java.lang包 Java最常用的包都属于该包, ...
- Java SE 基础:注释
Java SE 基础:注释 一.注释定义 用于解释说明程序的文字. 二.注释的作用 1.解释说明程序,提高程序的可读性 2.可以帮助我们调试程序:通过注释代码块,检测错误位置 三.格式 1.单行注释 ...
- Java SE 基础:标识(zhì)符
Java SE 基础:标识(zhì)符 一.标识符定义 标识符,就是给类.接口.方法.变量等起名字时的字符序列 二.组成规则与注意事项 1.组成规则 英文大小写字母 数组 $ 和 _ 2.注意事项 不 ...
随机推荐
- 2016暑假多校联合---GCD
Problem Description Give you a sequence of N(N≤100,000) integers : a1,...,an(0<ai≤1000,000,000). ...
- 【JAVA并发编程实战】1、对象的共享
1.栈封闭 在栈封闭中,只能通过局部变量才能访问对象. 所谓栈封闭就是把变量的声明以及应用都局限在一个局部线程中,在这个局部线程中声明和实例化的对象对于线程外部是不可见的,这个局部线程的栈,无法被任何 ...
- MySQL高效分页解决方案集(转)
很久以前的一次面试中,被面试官问到这个问题,由于平时用到的分页方法不多,只从索引.分表.使用子查询精准定位偏移以外,没有使用到其它方法. 后来在看其它博客看到了一些不同的方案,也一直没有整理.今天有时 ...
- Java 经典实例: Unicode字符和String之间的转换
在Java诞生之际,Unicode码是一个16位的字符集,因此char值似乎顺其自然为16位宽,多年来一个char变量几乎可以表示任何Unicode字符. /** * Created by Frank ...
- tomcat 7下spring 4.x mvc集成websocket以及sockjs完全参考指南
之所以sockjs会存在,说得不好听点,就是因为微软是个流氓,现在使用windows 7的系统仍然有近半,而windows 7默认自带的是ie 8,有些会自动更新到ie 9,但是大部分非IT用户其实都 ...
- Hibernate(八)__级联操作、struts+hibernate+接口编程架构
级联操作 所谓级联操作就是说,当你进行主对象某个操作时,从对象hibernate自动完成相应操作. 比如: Department <---->Student 对象关系,我希望当我删除一个d ...
- 静态代码审查工具FxCop插件开发(c#)
FxCop是一款微软官方提供的.net平台代码审查工具,目的是检查我们编写的程序集的代码是否符合规范.FxCop默认提供的是微软默认的审查规则,而且该规则符合<Framework DesignG ...
- JavaScript解析URL参数
创建一个Js类: var Request = { QueryString: function (item) { var svalue = location.search.match(new RegEx ...
- 为友盟消息推送开发的PHP SDK(composer版):可以按省发Android push
一直以来APP希望按省市县推送Android push,只能自己分析用户经纬度,打tag发送. 现在终于有服务商提供了. 友盟消息推送 可以“按省推送”,很方便. 我为友盟做了PHP SDK(comp ...
- JavaScript 事件入门
一.事件介绍 JavaScript 有三种事件模型:内联模型.脚本模型和 DOM2 模型. 二.内联模型 //在 HTML 中把事件处理函数作为属性执行 JS 代码 <input type=&q ...