lamda表达式

lamda表达式

java8的新特性

第一课:

lamda简单示例

package lamda;

/**
 * @author Fegert
 * @version 2019年9月18日 下午7:55:53
 * 
 */
public class lamdaTest {
	public static void main(String[] args) {
		// 1.使用接口实现类的方式
		Comparator comparator1 = new MyComparator();

		// 2.使用匿名内部类
		Comparator comparator2 = new Comparator() {
			@Override
			public int compare(int a, int b) {
				return a - b;
			}
		};

		// 3.使用lamda表达式
		Comparator comparator = (a, b) -> a - b;

	}

}

class MyComparator implements Comparator {

	@Override
	public int compare(int a, int b) {
		// TODO Auto-generated method stub
		return a - b;
	}

}
@FunctionalInterface
interface Comparator {
	int compare(int a, int b);
}
  • lamda实质是一个匿名函数

    返回值类型 函数名 参数 方法体

  • lamda表达式的作用

    对某些接口进行简单实现,但不是所有接口都可以由lamda表达式来实现;

  • 接口类型需求

    接口必须实现的方法必须只有一个

    Java8中的default 可以给接口默认实现方法

  • @FunctionalInterface 注解

    判断接口是否为函数式接口

第二课:

lamda 基础语法

src.lamdainterface包下的一系列接口

package lamdaInterface;
//无参无返回值
@FunctionalInterface
public interface LamdaNoneReturnNoneParameter {
	void test();
}
package lamdaInterface;
//单参数无返回值
public interface LamdaNoneReturnSingleParameter {
	void test(int a);
}
package lamdaInterface;
//多参数无返回值
@FunctionalInterface
public interface LamdaNoneReturnMutipleParameter {
	void test(int a,int b);
}
package lamdaInterface;
//无参数有返回值
public interface LamdaSingleReturnNoneParameter {
	int test();
}
package lamdaInterface;
//单参数有返回值
public interface LamdaSingleReturnSingleParameter {
	int test(int a);
}
package lamdaInterface;
//多参数有返回值
@FunctionalInterface
public interface LamdaSingleReturnMutipleParameter {
	int test(int a,int b);
}

lamda实质就是一个匿名函数

函数考虑四个点:返回值类型 函数名 参数 方法体

lamda表达式:返回值类型 函数名 参数 方法体

lamda基础语法

  • ():用来描述参数表
  • { } :用来描述方法体
  • -> :lamda 运算符 读作goes to

对上述的六个接口使用amda 表达式的基本使用示例:

package lamda;
import lamdaInterface.LamdaNoneReturnMutipleParameter;
import lamdaInterface.LamdaNoneReturnNoneParameter;
import lamdaInterface.LamdaNoneReturnSingleParameter;
import lamdaInterface.LamdaSingleReturnMutipleParameter;
import lamdaInterface.LamdaSingleReturnNoneParameter;
import lamdaInterface.LamdaSingleReturnSingleParameter;
public class LamdaAnotherTest {
	public static void main(String[] args) {
		/**无参 无返回
		 * void test();
		 *flag 1
		 */
		LamdaNoneReturnNoneParameter lamda1=()->{
			System.out.println("lamda1");
		};
		lamda1.test();
		/**单参数 无返回值
		 * void test(int a);
		 *flag 2
		 */
		LamdaNoneReturnSingleParameter lamda2=(int a)->{
			System.out.println(a);
		};
		lamda2.test(10);
		/**多单数 无返回值
		 * void test(int a,int b);
		 *flag 3
		 */
		LamdaNoneReturnMutipleParameter lamda3=(int a,int b)->{
			System.out.println(a+b);
		};
		lamda3.test(1,21);
		/**无参数 有返回值
		 * int test();
		 * flag 4
		 */
		LamdaSingleReturnNoneParameter lamda4=()->{
			System.out.println("lamda4");
			return 10;
		};
		int ref=lamda4.test();
		System.out.println(ref);
		/**单参数 有返回值
		 * int test(int a);
		 * flag 5
		 */
		LamdaSingleReturnSingleParameter lamda5=(int a)->{
			System.out.println(a);
			return a;
		};
		lamda5.test(1);
		/**多单数 有返回值
		 * int test(int a,int b);
		 * flag 6
		 */
		LamdaSingleReturnMutipleParameter lamda6=(int a,int b)->
		{
			System.out.println(a+b);
			return a+b;
		};
		lamda6.test(1,2);
	}
}

思考问题:代码依旧很长且繁琐,能否进一步精简化?接口中定义了返回值类型,那么能否舍去return字段呢?

第三课

amda语法精简

  • 参数类型

由于在接口的抽象方法中已经定义了接口的参数的数量和类型,所以在lamda表达式中参数的类型可以省略

备注:如果要省略类型,所有参数都得省略。不能一个参数省略类型,一个参数不省略类型。

LamdaNoneReturnMutipleParameter lamda3=( a, b)->{
			System.out.println(a+b);
		};	
  • 参数小括号

如果参数列表中,参数的数量只有一个;此小括号可以省略。

LamdaNoneReturnSingleParameter lamda2= a ->{
			System.out.println(a);
		};
  • 方法大括号

如果方法体只有一句,此大括号可以省略

LamdaNoneReturnSingleParameter lamda2= a -> System.out.println(a);

**如果方法体中只有一条语句且是一个返回语句,则省略大括号的同时 ,也 必须 省略掉return;

LamdaSingleReturnMutipleParameter lamda6=(a ,b) -> a+b;

第四课

https://www.bilibili.com/video/av49457747/?p=5

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值