lambda表达式
java1.8引入了lambda表达式
lambda 希腊字母的第11个(Λ,λ) λ粒子 音译读作:拉姆达
lambda就是一个名字具体怎么用呢?
lambda表达式与匿名内部类的关系
首先复习:匿名内部类
匿名内部类:必须基于抽象类或者是接口,其主要的目的是减少程序中类的定义
范例:
interface IMessage{
public void print(String info);
}
public class Demo {
public static void main(String []args){
IMessage ime =new IMessage(){
public void print(String info){
System.out.println(info);
}
};
ime.print("Hello World");
}
}
以上的匿名内部类完成 Hello World写了一堆代码
用lambda表达式可以实现简单的匿名内部类的使用
interface Message{
public void print(String info);
}
public class Demo {
public static void main(String []args){
Message me =
(info)-> System.out.println(info);
me.print("Hello World1");
}
}
(info)-> System.out.println(info);
(复制)这句话就是函数式编程的所在
lambda表达式的格式: (参数) -> {语句(方法体)} ;
这里一个极端的举例,这是有前提条件的,因为我们的方法体只有一行代码
如果正常定义一个接口,肯定有一堆堆的方法,为什么这个语句可以直接取得这个方法?而不匹配其他的方法只匹配这一个方法呢?
如果你的接口只是为了一个lambda表达式函数编写的话,那么只能够定义一个抽象方法.所以这样编写的lambda表达式才能够匹配这个抽象方法.
但是怎么区分这个接口是为了lambda提供的还是一个普通的接口呢?
为此在JDK1.8后又引入了一个新的Annotation
---------@FunctionalInterface 里面只能够定义一个方法
那么对于Lambda表达式而言,其方法体的使用形式如下几种:
~只有一行语句: (参数) -> 程序执行的语句;
~有多行语句: (参数) ->{程序语句};
interface Math{
public int add(int x,int y);
}
public class Demo {
public static void main(String[] args) {
Math msg =(i,j) -> {
int result =i+j;
System.out.println("第1个数字"+i);
System.out.println("第2个数字"+j);
System.out.println("计算结果"+result);
return result;
};
System.out.println(msg.add(10,20));
}
}
简单返回: (参数)-> 表达式
interface Math{
public int add(int x,int y);
}
public class Demo {
public static void main(String[] args) {
Math msg =(i,j) -> i+j;//没有return
System.out.println(msg.add(10,20));
}
}