时间:2021-05-20
第一个Lambda表达式
在Lambda出现之前,如果我们需要写一个多线程可能需要下面这种方式:
Runnable runnable = new Runnable() { @Override public void run() { System.out.println("Hello runnable"); } }; ... thread.start();上面的例子如果改成使用Lambda就会简单许多:
Runnable noArgs = ()->System.out.println("Hello Lambda!~");... thread.start();Lambda表达式是一个匿名函数,将行为像数据一样传递,表达式使用 -> 将参数和主体分开, -> 前面是参数部分,后面这是主体部分。
Lambda的其它形式
以上就是Lambda表达式的所有形式了。
那么问题来了:
BinaryOperator<Long> add = (Long x,Long y)->x+y; 是个什么意思?
这行代码并不是讲个数字相加,而是创建了一个函数,用来计算两个数字相加的结果。而add的类型是 BinaryOperator<Long> ,它也不是两个数字的和,而是将两个数字相加的那段代码。下面的例子展示如何使用这个变量:
BinaryOperator<Long> add = (Long x,Long y)->x+y; Long res = add.apply(3L, 4L); System.out.println("res="+res);//输出:res=7函数接口
函数接口是只有一个抽象方法的接口,用作Lambda表达式的类型。
如 Runnable 就是一个函数接口。
新建一个我们自己的函数接口:
public interface AddOperator<T,D> { long add(T one,D two);}使用:
AddOperator<Long,Long> addOperator = ( x, y)->x +y; System.err.println("Custom function listener res= "+addOperator.add(34L, 65L));目标类型
目标类型是指Lambda表达式所在上下文环境的类型。比如,将Lambda表达式赋值给一个局部变量,或传递给一个方法作为参数,局部变量或方法参数的类型就是Lambda表达式的目标类型。
final
如果我们在匿名内部类中引用了所在方法中的局部变量,这是需要局部变量是 final 的。
在Lambda中我们不需要将引用的外部局部变量声明为 final 的,但是该变量只能被赋值一次。
下面的例子中如果我们去掉注释,对name再次赋值,则无法通过编译,并显示出错信息: local variables referenced from a Lambda expression must be final or effectively final.
Lambda表达式引用的局部变量必须是final或即成事实的final。
String name = getUserName();//name="hi";button.addActionListener(event->System.out.println("name="+name));类型推断
Lambda表达式的类型推断是Java7中就引入的目标类型推断的扩展。
java7中的类型推断:
List<String> list= new ArrayList<>();
上例中我们并没有指定ArrayList的范型类型,而是根据list的类型,推断出了ArrayList的范性类型。
如: AddOperator<Long,Long> addOperator = ( x, y)->x +y;
通过此文,希望能帮助到大家,学习理解,此部分知识,谢谢大家对本站的支持!
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
Java8新特性Lambda表达式实例详解在介绍Lambda表达式之前,我们先来看只有单个方法的Interface(通常我们称之为回调接口):publicint
Android中Lambda表达式的使用实例详解Java8中着实引入了一些非常有特色的功能,如Lambda表达式、streamAPI、接口默认实现等等。Lamb
什么是Lambda表达式,java8为什么使用Lambda表达式?“Lambda表达式”(lambdaexpression)是一个匿名函数,Lambda表达式基
一、Lambda表达式简介Lambda表达式,是Java8的一个新特性,也是Java8中最值得学习的新特性之一。(另一个新特性是流式编程。)Lambda表达式,
java8引入了lambda表达式,lambda表达式实际上表示的就是一个匿名的function。在java8之前,如果需要使用到匿名function需要new