lambda表达式
本质上是一个匿名的方法:
先看下面这个例子,一个传统的方法
`public int add(int x,int y){
return x+y;
}`
转换为lambda之后就是下面这个样子
(int x,int y)->x+y //表达式
(int x,int y)->{return x+y};//语句块
lAMDba表达式的组成:参数列表,箭头,以及一个语句块或者是表达式. 如下
()->{}
()为参数列表,参数的类型可以省略,java编译器可以自动推断. 如果只有一个参数且可以被Java推断出类型,那么参数列表的括号也可以省略.
Lambda表达式的类型叫做”目标类型”,他是一个”函数接口”(定义:一个接口,如果只有一个显式声明的抽象方法,那么它就是一个函数接口。一般用@FunctionalInterface标注出来(也可以不标)。)
所以可以将Lambda表达式为一个函数接口赋值,如下
Runable接口就是一个函数接口,因为他只有一个显示声明的抽象run方法.所以可以如下使用lambda表达式.
Runable r1 = ()->{System.out.println("motian")};
一个λ表达式只有在转型成一个函数接口后才能被当做Object使用。
所以不能如下使用:
System.out.println(()->{System.out.println("motian")});
必须将先将Lambda转型如下
System.out.println((Runable)()->{System.out.println("motian")});
一个Lambda可以有多个目标的类型(函数接口),只要函数匹配成功就行.但至少应该有一个.
所以如下是可以的
Runnable r1 =() -> {System.out.println("mo");};
MyRunnable2 r2 = () -> {System.out.println("tian");};
应用
1.λ表达式主要用于替换,内部匿名类,各种回调,比如事件响应器、传入Thread类的Runnable等。如:
Thread t1 = new Thread(new Runnable() {
@Override
public void run() {
while (true) {
System.out.println("mo");
}
}
});
//可以如下书写
Thread lambda = new Thread(()->System.out.println("tian"));
2.Lambda表达式与集合类批处理操作
未使用Lambda表达式的的集合迭代操作
for(String str:list){
System.out.println(str);
}
使用后可以调整为
list.foreach(str->{System.out.println(str)})
未完待续。。。。
文章最后发布于: 2018-06-23 22:18:34
相关阅读
原文地址: https://www.computationalimaging.cn/2018/11/matlab.html卷积计算起来较为繁琐, 若能够用matlab辅助计算则会简单很
https://www.cnblogs.com/xyou/p/7427779.html(PS:这篇文章为转载,我不喜欢转载的但我觉得这篇文章实在是超赞了,就转了过来,这篇可
EL表达式 1. 概念:Expression Language 表达式语言 2. 作用:替换和简化jsp页面中java代码的编写 3. 语法:${表达式} 4. 注意: * jsp
前提:我用的jar包是:ik-expression-2.1.2.jar,一定要注意版本不同的jar,对应的xml的名称也不一样!!!! 1.创建xml:名称为:IKExpression.cfg.x
转自:https://www.jb51.net/article/105314.htmEL 全名为Expression LanguageEL 语法很简单,它最大的特点就是使用上很方便。接下来