快速入门快速入门Java中的中的Lambda表达式表达式
Lambda作为函数式编程中的基础部分,在其他编程语言中早就广为使用,但在Java领域中发展较慢,直到
java8,才开始支持Lambda。网上关于Lambda的教程很多,今天小编给大家分享一篇快速入手Lambda的教
程。
Lambda简介简介
Lambda表达式是Java SE 8中一个重要的新特性。lambda表达式允许你通过表达式来代替功能接口。 lambda表达式就和方法
一样,它提供了一个正常的参数列表和一个使用这些参数的主体(body,可以是一个表达式或一个代码块)。
Lambda表达式还增强了集合库。 Java SE 8添加了2个对集合数据进行批量操作的包: java.util.function 包以及 java.util.stream 包。
流(stream)就如同迭代器(iterator),但附加了许多额外的功能。 总的来说,lambda表达式和 stream 是自Java语言添加泛型
(Generics)和注解(annotation)以来最大的变化。
Lambda表达式本质上是匿名方法,其底层还是通过invokedynamic指令来生成匿名类来实现。它提供了更为简单的语法和写作方
式,允许你通过表达式来代替函数式接口。在一些人看来,Lambda就是可以让你的代码变得更简洁,完全可以不使用——这
种看法当然没问题,但重要的是lambda为Java带来了闭包。得益于Lamdba对集合的支持,通过Lambda在多核处理器条件下
对集合遍历时的性能提高极大,另外我们可以以数据流的方式处理集合——这是非常有吸引力的。
Lambda语法语法
Lambda的语法极为简单,类似如下结构:
(parameters) -> expression
或者
(parameters) -> { statements; }
Lambda表达式由三部分组成:表达式由三部分组成:
1、、paramaters::类似方法中的形参列表,这里的参数是函数式接口里的参数。这里的参数类型可以明确的声明也可不声
明而由JVM隐含的推断。另外当只有一个推断类型时可以省略掉圆括号。
2、、->::可理解为“被用于”的意思
3、方法体:、方法体:可以是表达式也可以代码块,是函数式接口里方法的实现。代码块可返回一个值或者什么都不反回,这里的
代码块块等同于方法的方法体。如果是表达式,也可以返回一个值或者什么都不反回。
我们通过以下几个示例来做说明:
//示例1:不需要接受参数,直接返回10
()->10
//示例2:接受两个int类型的参数,并返回这两个参数相加的和
(int x,int y)->x+y;
//示例2:接受x,y两个参数,该参数的类型由JVM根据上下文推断出来,并返回两个参数的和
(x,y)->x+y;
//示例3:接受一个字符串,并将该字符串打印到控制到,不反回结果
(String name)->System.out.println(name);
//示例4:接受一个推断类型的参数name,并将该字符串打印到控制台
name->System.out.println(name);
//示例5:接受两个String类型参数,并分别输出,不反回
(String name,String sex)->{System.out.println(name);System.out.println(sex)}
//示例6:接受一个参数x,并返回该该参数的两倍
x->2*x
Lambda用在哪里用在哪里
在[函数式接口][1]中我们知道Lambda表达式的目标类型是函数性接口——每一个Lambda都能通过一个特定的函数式接口与一
个给定的类型进行匹配。因此一个Lambda表达式能被应用在与其目标类型匹配的任何地方,lambda表达式必须和函数式接口
的抽象函数描述一样的参数类型,它的返回类型也必须和抽象函数的返回类型兼容,并且他能抛出的异常也仅限于在函数的描
述范围中。
接下来,我们看一个自定义的函数式接口示例:
@FunctionalInterface
interface Converter<F, T>{