学习任务:

视频学习

Lambda表达式语法格式

测试Lambda表达式

理解什么是函数式接口

Lambda表达式是匿名内部类的一种简化形式,但它的语法格式却有很大的不同,语法如下:

(参数类型 参数名称) -> { 方法体代码 }

共由3个部分组成:

1)参数列表

参数列表与接口中所定义的方法参数列表一致,如果没有参数则只写一个小括号,多个参数之间以逗号分隔。

2)箭头

->是java新引入的语法格式,指向动作即做什么。

3)方法体代码

大括号内的语法与传统方法体要求基本一致 。

下边测试Lambda表达式的各种形式。

1)无参数无返回值

定义接口Fun1,包括一个抽象方法handler,没有参数和返回值。

package com.pbteach.javase.oop.lambda.test2;

/**
 * 函数式接口
 * @author 攀博课堂(www.pbteach.com)
 *
 */
public interface Fun1 {
	//无参无返回值
	void handler();
}

Lambda测试:

下边要定义一个与Fun1对应的Lambda表达式,Lambda表达式的形参、返回值要与接口中的抽象方法匹配,代码如下:

package com.pbteach.javase.oop.lambda.test2;

/**
 * Lambda测试
 * 
 * @author 攀博课堂(www.pbteach.com)
 *
 */
public class Fun1Demo {
 
	public static void main(String[] args) {

		//使用匿名内部类
		Fun1 fun1 = new Fun1() {
			@Override
			public void handler() {
				System.out.println("攀博课堂");
			}
		};
		doFun1(fun1);
		//使用Lambda表达式
		Fun1 fun1_1 = ()->{
			System.out.println("攀博课堂");
		};
		doFun1(fun1_1);
		//简化
		doFun1(()->{
			System.out.println("攀博课堂");
		});
	}

	public static void doFun1(Fun1 fun1) {
		fun1.handler();
	}
}

输出:

攀博课堂
攀博课堂
攀博课堂

Fun1是一个函数式接口,下边的lambda表达式是该函数式接口的对象:

()->{
			System.out.println("攀博课堂");
	}

lambda表达式的函数体是输出一行文字,将此lambda表达式传递给fun1,所以执行fun1.handler()即执行了这个函数体。

2)有参数有返回值

定义接口,抽象方法拥有两个int参数且具有int返回值。

package com.pbteach.javase.oop.lambda.test2;

/**
 * 函数式接口
 * @author 攀博课堂(www.pbteach.com)
 *
 */
public interface Fun2 {
	//有参数有返回值
	int handler(int a,int b);
}

Lambda测试,下边定义Lambda 表达式,拥有两个int参数且具有int返回值,代码如下:

package com.pbteach.javase.oop.lambda.test2;

/**
 * Lambda测试
 * 
 * @author 攀博课堂(www.pbteach.com)
 *
 */
public class Fun2Demo {
 
	public static void main(String[] args) {

		//调用doFun2
		doFun2((int x,int y)->{
			int z = x*y;
			return z;
		});
	}

	public static void doFun2(Fun2 fun2) {
		int r = fun2.handler(2,3);
		System.out.println(r);
	}
}

将下边的lambda表达式传递给doFun2方法的fun2参数:

(int x,int y)->{
			int z = x*y;
			return z;
		}

执行fun2.handler(2,3);表示将实参2和3传递给该函数体的两个形参x和y,计算两个数的积。

下边测试Lambda表达式的各种形式。

1)无参数无返回值

定义接口Fun1,包括一个抽象方法handler,没有参数和返回值。

package com.pbteach.javase.oop.lambda.test2;

/**
 * 函数式接口
 * @author 攀博课堂(www.pbteach.com)
 *
 */
public interface Fun1 {
	//无参无返回值
	void handler();
}

Lambda测试:

下边要定义一个与Fun1对应的Lambda表达式,Lambda表达式的形参、返回值要与接口中的抽象方法匹配,代码如下:

package com.pbteach.javase.oop.lambda.test2;

/**
 * Lambda测试
 * 
 * @author 攀博课堂(www.pbteach.com)
 *
 */
public class Fun1Demo {
 
	public static void main(String[] args) {

		//使用匿名内部类
		Fun1 fun1 = new Fun1() {
			@Override
			public void handler() {
				System.out.println("攀博课堂");
			}
		};
		doFun1(fun1);
		//使用Lambda表达式
		Fun1 fun1_1 = ()->{
			System.out.println("攀博课堂");
		};
		doFun1(fun1_1);
		//简化
		doFun1(()->{
			System.out.println("攀博课堂");
		});
	}

	public static void doFun1(Fun1 fun1) {
		fun1.handler();
	}
}

输出:

攀博课堂
攀博课堂
攀博课堂

Fun1是一个函数式接口,下边的lambda表达式是该函数式接口的对象:

()->{
			System.out.println("攀博课堂");
	}

lambda表达式的函数体是输出一行文字,将此lambda表达式传递给fun1,所以执行fun1.handler()即执行了这个函数体。

2)有参数有返回值

定义接口,抽象方法拥有两个int参数且具有int返回值。

package com.pbteach.javase.oop.lambda.test2;

/**
 * 函数式接口
 * @author 攀博课堂(www.pbteach.com)
 *
 */
public interface Fun2 {
	//有参数有返回值
	int handler(int a,int b);
}

Lambda测试,下边定义Lambda 表达式,拥有两个int参数且具有int返回值,代码如下:

package com.pbteach.javase.oop.lambda.test2;

/**
 * Lambda测试
 * 
 * @author 攀博课堂(www.pbteach.com)
 *
 */
public class Fun2Demo {
 
	public static void main(String[] args) {

		//调用doFun2
		doFun2((int x,int y)->{
			int z = x*y;
			return z;
		});
	}

	public static void doFun2(Fun2 fun2) {
		int r = fun2.handler(2,3);
		System.out.println(r);
	}
}

将下边的lambda表达式传递给doFun2方法的fun2参数:

(int x,int y)->{
			int z = x*y;
			return z;
		}

执行fun2.handler(2,3);表示将实参2和3传递给该函数体的两个形参x和y,计算两个数的积。

提问-攀博课堂
我要提问 不会就问,有效沟通
关注公众号,加入微信群交流提问。 攀博课堂官方公众号
问答列表,查看本知识点所有问题