java Lambda

1、简单介绍

当我们创建一个内部类的适合,要写类名,函数名,类型等很多东西,比如



public class demo1 {

	public static void main(String[] args) {

		//普通地创建内部类,很麻烦
		new Thread(new Runnable() {

			@Override
			public void run() {
				System.out.println("普通的匿名内部类创建");

			}
		}).start();				
	}
}

真正有用的就只是输出一句话而已,居然要做这么多麻烦的工作,所以Java8开始,就为我们弄了个Lambda的东西让我们简化代码

package restudy;

public class demo1 {

	public static void main(String[] args) {
		// Lambda方式创建了内部类
		new Thread(() -> {

			System.out.println("Lambda方式的匿名内部类创建");

		}).start();
	}
}

这个,不需要写new 类名,不需要写函数,里面就只有() -> { 输出语句 } 就完事了,多么简单

2、语法分析

仔细分析该代码中的语义, Runnable 接口只有一个 run 方法的定义:public abstract void run();

3部分组成

  • 一些参数
  • 一个箭头
  • 一段代码

具体语法:

()> {
	System.out.println("多线程任务执行!");
	}

3、无参数无返回例子

我们就先定义一个接口(Myinterface),里面写一个抽象类的函数(void printTest();),这样我们就一定要在用的时候重写函数了。然后在主程序创建一个静态函数(LambdaTest(Myinterface myinterface)),参数为接口(Myinterface),LambdaTest()里面调用接口函数myinterface.printTest();。最后再在主程序中调用LambdaTest(),由于里面有参数Myinterface,所以要新建对象,这个新建对象就可以用Lambda来使用了

package restudy;

public interface Myinterface {
	void printTest();
}

package restudy;

public class demo1 {

	public static void main(String[] args) {
		//普通地调用内部类
		LambdaTest(new Myinterface() {
			
			@Override
			public void printTest() {
				// TODO 自动生成的方法存根
				System.out.println("创建成功");
			}
		});
	
		//用Lambda调用内部类
		LambdaTest(() -> {
			System.out.println("创建成功");
		});

	}

	private static void LambdaTest(Myinterface myinterface) {
		myinterface.printTest();

	}

}

创建成功
Lambda创建成功

4、用参数和返回值的例子

package restudy;

public interface Myinterface {
	int printTest(int a,int b);
}

package restudy;

public class demo1 {

	public static void main(String[] args) {
		//调用LambdaTest方法,第三个参数是new一个interface接口的
		LambdaTest(10, 20, (int a, int b) -> {
			return a + b;
		});

	}
	
	//静态方法,第三个参数调用Myinterface
	private static void LambdaTest(int a, int b, Myinterface myinterface) {
		int result = myinterface.printTest(a, b);
		System.out.println("两个相加得到" + result);
	}

}

两个相加得到30

5、Lambda省略格式

  • 小括号内参数的类型可以省略;
  • 如果小括号内有且仅有一个参,则小括号可以省略;
  • 如果大括号内有且仅有一个语句,则无论是否有返回值,都可以省略大括号、return关键字及语句分号。
  • 使用Lambda必须具有接口,且要求接口中有且仅有一个抽象方法。
package restudy;

public interface Myinterface {
	int printTest(int a);
}

package restudy;

public class demo1 {

	public static void main(String[] args) {
		// 调用LambdaTest方法,
		LambdaTest(10, (int a) -> {
			return a;
		});

	}

	// 静态方法,第三个参数调用Myinterface
	private static void LambdaTest(int a, Myinterface myinterface) {
		int result = myinterface.printTest(a);
		System.out.println("这个值为" + result);
	}

}

简写:

package restudy;

public class demo1 {

	public static void main(String[] args) {
		// 调用LambdaTest方法,
		LambdaTest(10,
			(a)-> a
				);

	}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值