Lambda表达式

面向对象的最大的优点在于:结构必须非常完整。当然,这是它的最大的优点,也是他的缺点。结果过于完整就使得写一个小的输出就得定义完整的结构,比如下面的:

interface IMessage{
	public void print();
}
public class TestDemo{
	public static void main(String args[]) {
		IMessage msg=new IMessage() {
			public void print() {
				System.out.println("hello world");
			}
		};
		msg.print();
	}
}

但是为了输出这么一句话写了这么多代码,实在太累了,下面我们使用函数式编程的lambda来执行上面同样的功能:

interface IMessage{
	public void print();
}
public class TestDemo{
	public static void main(String args[]) {
		IMessage msg=()->System.out.println("hello world");
		msg.print();
	}
}

上面就是一个函数式编程lambda的实现。但是使用Lambda表达式有一个前提,那就是接口必须有一个方法,如果这个接口有多个待实现的方法,那么就不能使用Lambda表达式。

但是,为了解决让一个接口只有一个抽象方法问题,我们可以使用函数式注解这个东东——@FunctionalInterface。下面演示的是当使用了这个注解的时候,如果接口里面有两个抽象方法,接口本身就会立即报错,删掉一个抽象方法就可以了。注解的目的就是告诉接口你是一个函数式接口,不能有两个抽象方法。

@FunctionalInterface
interface IMessage{
	public void print();
	public void fun();
}
public class TestDemo{
	public static void main(String args[]) {
		IMessage msg=()->System.out.println("hello world");
		msg.print();
	}
}

Lambda表达式的语法形式

(参数)->语句

下图表示的就是这个相似的过程。

如果使用Lambda要执行多条语句那么就要使用到{}来解决

@FunctionalInterface
interface IMessage{
	public void print();
}
public class TestDemo{
	public static void main(String args[]) {
		IMessage msg=()->{
			System.out.println("hello world");
			System.out.println("hello world");
			System.out.println("hello world");
		};
		msg.print();
	}
}

如果Lambda表达式需要有返回值的话,那么可以直接写结果,不用return就行

@FunctionalInterface
interface IMath{
	public int add(int x,int y);
}
public class TestDemo{
	public static void main(String args[]) {
		IMath math=(p1,p2)->p1+p2;
		System.out.println(math.add(10, 20));
	}
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值