java之Lambda表达式

Posted wgblog-code

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java之Lambda表达式相关的知识,希望对你有一定的参考价值。

一、Lambda表达式入门

我们先来看一段代码:匿名内部类的方式实现参数的传递

interface Command
	public abstract void test();


public class CommandTest 
	
	public void show(Command c) 
		c.test();
	
	
	public static void main(String[] args) 
		CommandTest ct=new CommandTest();
		
		ct.show(new Command() 
			
			@Override
			public void test() 
				System.out.println("Command测试");
			
		);
	


 

interface Command
	public abstract void test();


public class CommandTest 
	
	public void show(Command c) 
		c.test();
	
	
	public static void main(String[] args) 
		CommandTest ct=new CommandTest();
		
		ct.show(()->System.out.println("Lambda表达式入门测试"););//Lambda表达式实现参数传递
 

  

上面的一段代码和之前的除了参数传递方式不同,其他都一样,第一段代码用匿名内部类的方式实现参数传递,第二段代码用Lambda表达式实现参数传递。

我们会发现使用Lambda表达式实现参数传递会简洁很多,少写了很多代码,却可以实现同样的功能。

 

二、Lambda表达式详细介绍:

Lambda表达书由三部分组成:

1、形参列表。形参列表允许省略形参类型。如果形参列表中只有一个参数,甚至连形参列表的圆括号也可以省略。

2、箭头(->),必须由英文中画线和大于号组成

3、代码块。如果代码块只包含一条语句, Lambda表达式允许省略代码块的花括号,那么这条语句就不要用花括号表示语句结束。 Lambda代码块只有一条 retur语句,甚至可以省略 return关键字。 Lambda表达式需要返回值,而它的代码块中仅有一条省略了 return的语句, Lambda表达会自动返回这条语句的值。

 

Lambda表达式与函数式接口:

Lambda表达式的类型,也称为“目标类型”,Lambda表达式的类型必须是函数式接口,函数式接口就是只能拥有一个抽象方法的接口。函数式接口可以包含多个默认方法和类方法,但只能有一个抽象方法。

 

Lambda表达式与匿名内部类的区别:

1、Lambda表达式与匿名内部类一样,都可以直接访问“ effectively final”的局部变量,以及外部类的成员变量(包括实例变量和类变量)。

2、Lambda表达式创建的对象与匿名内部类生成的对象一样,都可以直接调用从接口中继承的默认方法

3、

 

以上是关于java之Lambda表达式的主要内容,如果未能解决你的问题,请参考以下文章

JAVA8之lambda表达式详解,及stream中的lambda使用

Java学习笔记之 Lambda表达式

好程序员分享java8新特性之Lambda表达式

Java 之 lambda 表达式

Java之Lambda表达式

Java技术分享:Lambda表达式之接口实例化