Java8中的Lambda表达式

时间:2021-03-02 22:11:55

一.简述

Lambda表达式本是属于JDK1.7的Lambda项目的内容.在JDK1.7开发琪琪,Sun公司由于相继在技术竞争和商业竞争中都深陷泥潭,公司的股票市值跌至仅有高峰时期的3%,已无力推动JDK1.7的研发工作按正常进行.为了尽快结束JDK1.7长期"跳票"的问题,Oracle公司收购Sun公司后不就便宣布将实行"Plan B","Plan B"把不能按时完成的Lambda项目,Jigsaw项目和Coin项目的部分改进延迟到JDK1.8之中(更多详细的请见Java发展史).所以Lambda的功能才在JDK1.8中发布.

Lambda表达式基于数学中的λ演算得名,但是和λ演算的关系又相差甚远.有点像原子弹和质能方程的关系,差别其实还是挺大的.

什么的Lambda表达式呢?
简答来说Lambda表达式就是匿名方法.

匿名方法的概念类似于Anonymous类的不同之处在于它实现了一个函数式接口.
函数式接口是Java8中的新接口概念.函数式接口只能声明一个抽象方法.
函数式接口详细见:

http://blog.csdn.net/hspingcc/article/details/73336329

Lambda表达式运行程序员以简洁的方式传递代码,从而使代码更加的简洁.

二. Lambda表达式语法

Lambda表达式包含:
a.参数列表
b.剪头符号(->)
c.正文的Lambda语句

Lambda表达式的语法:
(参数)->{正文语句;}

三.Lambda表达式的使用

1.lambda表达式可以有零个或多个参数

例1:
() -> {System.out.println("Hello World");}
例2:
// 接收两个int型的x,y,返回他们的和
(int x, int y) -> {return x+y;}

2.如果参数的类型可以由编译器决定,那么我们可以忽略在lambda表达式中添加它们。

例1:
(int x, int y) -> {return x+y;} // 带有参数类型

(x,y) -> {return x+y;}; // 忽略参数类型

3.如果只有一个参数。参数的括号可以省略

例1:
x -> {return x+10;}

String s -> System.out.println(s)

4.如果body只有一个表达式,那么return关键字和大括号可以省略

(int x, int y) -> x + y
如果省略返回类型的参数,则编译器将确定默认参数类型。

5.Lambda可以有空参数和空正文语句

例1:
() -> {return “Hello World”;} // 空参数

()->{} // 空参数以及空体

四.调用Lambda表达式

Lambda表达式就像一个方法一样被调用和执行.
对于调用Lambda表达式,我们应该创建一个函数式接口.
例1:

public class MyFuntionalInterface {

interface MyInterface{
void hello();
}
public static void main(String[] args) {
MyInterface infVar = () -> {System.out.println("Hello World");};

infVar.hello();
}

}

五.总结

结合函数式接口章节阅读学习
说个题外话,看到有人说java的Lambda表达式落后C# 8年才出现,并不是java语言落后所致,而是Sun公司的衰落而至.