深入浅出函数式编程之lambada表达式 - >

lambda作为JDK1.8的新特性,函数式编程不可不知,请看:

lambda底层实现原理

1. 编译器会为每一个lambda表达式生成一个方法
		方法名是lambda$0,1,2,3,但方法引用的表达式不会生成方法。
2. 在lambda地方会产生一个invokeDynamic指令,这个指令会调用
		bootstrap(引导)方法,bootstrap方法会指向自动生成的lambda$0
		方法或者方法引用的方法。
3. bootstrap方法使用上是调用了LambdaMetafactory.metafactory静态方法
		该方法返回了CallSite(调用站点),里面包含了MethodHandle(方法句柄)
		也就是最终调用的方法。
4. 引导方法只会调用一次。
自动生成的方法:
5. 输入和输出和lambda一致
6. 如果没有使用this,那么就是static方法,否则就是成员方法

示例:

public strictfp class LambdaDemo1 {
	public static void main(String[] args) {
		//引用接口1 实现i*2
		Interface1 i1 = (i) -> i * 2;
		//引用接口1 实现 10-3
		Interface1.sub(10, 3);
		//先加后乘
		System.out.println(i1.add(3, 7));
		System.out.println(i1.doubleNum(20));
		//引用接口2 i*2
		Interface2 i2 = i -> i * 2;
		//乘2后打印
        System.out.println("i2:"+i2.doubleNum(333333333));
		//引用接口3 i*3
        Interface3 i5 = i -> i*3;
        //乘3后打印
        System.out.println("i5:"+i5.doubleNum(333333333));
		//引用接口1 先打印----- 后i*2
		Interface1 i4 = (int i) -> {
			System.out.println("-----");
			return i * 2;
		};
		//乘2后打印输出
        System.out.println(i4.doubleNum(100));
	}
	
	@FunctionalInterface
	interface Interface1 {
		int doubleNum(int i);
	
		default int add(int x, int y) {
			return x + y;
		}
	
	static int sub(int x, int y) {
		return x - y;
	}
}

	@FunctionalInterface
	interface Interface2 {
		int doubleNum(int i);
	
		default int add(int x, int y) {
			return x + y;
		}
	}
	
	@FunctionalInterface
	interface Interface3 extends Interface2, Interface1 {
		@Override
		//继承
		default int add(int x, int y) {
			return Interface1.super.add(x, y);
		}
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值