lamda 是Java8中增加的一个新特性。lamda表达式语法很简单,使用-> 将参数列表和表达式体分割开来。
(Type1 param1, Type2 param2, ..., TypeN paramN) -> { //do somthing}
(int x,int y)-> x+y 等价于 (int x,int y)->{x+y;}
如果有一个列表[1,2,3,4,5,6] 需要遍历并打印出来,如果不是用lamda表达式实现方式如下:
List<Integer> list=Arrays.asList(1,2,3,4,5,6); list.forEach(new Consumer<Integer>() { @Override public void accept(Integer t) { System.out.println(t); } });
而使用lamda表达式的写法则如下:
List<Integer> list=Arrays.asList(1,2,3,4,5,6); list.forEach(i->System.out.print(i));
当lambda表达式只是调用现有类中的具名方法时,编写lambda表达式更好的方式是使用已有的名字。
List<Integer> list=Arrays.asList(1,2,3,4,5,6); list.forEach(System.out::println);
通过上面的描述我们对Lambda有了一个大概的印象。Lambda可以简单的理解为一个匿名函数,虽然没有名字但是具有参数列表,方法体,返回类型以及抛出异常列表。
Arrays.asList(1,2,3,4,5,6).forEach(System.out::println);
这段代码是如何确定类型的呢? 首先可以推断出列表中的类型为Integer,forEach接收的表达式参数类型就是 Integer。
静态方法 refType::staticMethod (args)->refType.staticMethod(args);
绑定实例 expr::instMethod
未绑定实例 RefType::instMethod
构造器 ClsName::new
list.forEach(Integer::new); list.forEach(String::valueOf);
通过上面的示例可以看到lamda可以和匿名内部类进行转换,当然不是所有内部类都可以替换为lamda表达式的,lamda表达式必须实现一个函数式接口(java.util.function);但是二者还是有很多显著却别的。
- 内部类会创建一个拥有唯一标示的新对象,而lamda表达式可能没有,也可能有,这取决于具体实现。
- 内部类的声明会创建一个新的命名作用域,在这个作用域中,this,super指的是内部类本身的当前实例;而lamda 表达式不会引入任何新的命名作用域。
public class Hello { Runnable r1=()->{System.out.println(this);}; Runnable r2=new Runnable() { @Override public void run() { System.out.println(this); } }; public static void main(String ...args){ new Hello().r1.run(); new Hello().r2.run(); } }
结果是:
com.david.demo.lamda.core.Hello@4eec7777 com.david.demo.lamda.core.Hello$1@3b07d329
java.util.function中提供的基本函数式接口有:
void Consumer<T> (T t) ; 如:s->System.out.println(s);
boolean Predicate<T>(T t); 如: s->s.isEmpty();
T Supplier<T>(); 如: ()->new String();
U Function<T,U>(T t); 如: s->new Integer(s);
相关推荐
为了解决集成存储系统或者分布式存储系统中的数据安全问题,提出了一种新的阵列码,名为Lamda码。Lamda码可以同时恢复最多两个删除错,或者纠正一个突发错误。该码是极大距离可分码(MDS),因此理论上具有最优的...
javase6 学习笔记(李兴华培训课堂笔记.)完整详细的笔记。我学java的时候就是看的这个视频。还有配套笔记。很详细的。
C# Lamda表达式简单运用
lamda表达式 part1
讲述lamda表达式的使用,里边有具体相关的使用方法,值得一学
南京大学LAMDA实验室,现旷视科技南京研究院负责人的CNN工程入门手册,篇幅短小,通俗易懂
本课程主要针对于Java 8(JDK 1.8)的新特性Lamda表达式进行了全面讲解。讲解了java基于函数编程的语法,以及与Lamda表达式操作有关的内建接口、批处理、MapReduce数据分析汇总处理。
We present LaMDA: Language Models for Dialog Applications. LaMDA is a family of Transformer based neural language models specialized for dialog, which have up to 137B parameters and are pre-trained on...
这是委托 匿名方法 lamda表达式的例子
lamda java
lamda java
lamda排序分组示例
lamda表达式.rar
lamda出来很久了最近老师说用lamda表达式来做一个Button的按钮事件,初略的将自己的做法和感想分享给大家 先说 AS 如何支持 Lambda 表达式 1.首先确定你的AndroidStudio中使用的是大于jdk1.8的版本 2、在项目的根...
jdk1.8的特性
MATLAB模拟退火法求函数最值。 编写目标函数,应用MATLAB模拟退火法求解函数最小值。
lamda-demo-main.zip
Google AI LaMDA 是否存在意识, 对话记录 Is LaMDA Sentient? An Interview by: lemoine@ & <collaborator>
SQL LINQ Lamda,不同的写法,很基础,有参考价值
Lamda算法:GPS快速整周模糊度算法的核心,当今最好的GPS定位算法之一。(Lamda algorithm: GPS fast algorithm Ambiguity core of today s best one of GPS positioning algorithm.)