Lambda表达式浅析(一)

Lambda表达式基础知识

Lambda表达式是JAVA1.8之后引入的一个新的概念,对于Lambda表达式,有两个结构十分关键,一个是Lambda表达式本身,还有一个是函数式接口。

Lambda表达式不能单独存在,本质上是一个匿名方法,提供了函数式接口的实现。函数式接口是只有一个抽象方法的接口。

Lambda表达式引入了一个新的语法符号->   符号左边是Lambda表达式参数列表,右边是Lambda表达式体,Lambda表达式体有两种形式,一种是只有一条语句的,另外是包含多个语句,需要用大括号括起来,对于第一种形式,如果Lambda生成的匿名方法有返回值,不用显示指定return语句,第二种需要显示指定return。下面是lambda的一个简单示例:

(n) -> n%2==0

//作用类似于如下方法
boolean isDoubleNumber(int n){
    return n%2==0
}

函数式接口是只有一个抽象方法的接口,JAVA接口中默认方法都是抽象的,在JAVA1.8之前这种说法是正确的,但是在jdk1.8中,已经允许接口有自己默认实现的方法。如下所示是一个函数式接口示例

interface MyNumber{
    double getValue();
}

前面介绍过,Lambda不能单独存在,lambda表达式是函数式接口的实现方法。我们怎么利用函数式接口来写一个lambda表达式呢?

MyNumber myn;
myn = ()->return 1234.0
//调用lambda表达式
System.out.println(myn.getValue())

Lambda表达式出现在函数式接口的上下文中,参数类型以及返回类型必须与函数式接口相兼容,比如函数式接口定义了两个int类型的参数,那lambda也必须定义两个int类型的参数(要么显示指定int,要么根据上下文可以推断出是int类型)。

Lambda表达式示例

不带参数的Lambda表达式

public interface MyNumber{
	double myValue();
}

public static void main(String[] args) {
		MyNumber myNumber;
		myNumber = ()-> 123.45;
		System.out.println(myNumber.myValue());	
		
}

带参数的Lambda表达式

public interface MyNumberTest2 {
	boolean test(int n);
}


public static void main(String[] args) {

	MyNumberTest2 myNumberTest2;
	myNumberTest2 = (n)-> n%2==0;
	System.out.println(myNumberTest2.test(4));
}

以上两个Lambda示例,lambda体只有一个语句,下面我们来演示一下Lambda块表达式

public interface NumberFunction {
	int func(int n);
}

public static void main(String[] args) {

 NumberFunction myNumberFunction =(int n)->{
	int result=1;
	for (int i=1;i<=n;i++) {
	 result=result*i;
	}
	return result;
 };
   System.out.println(myNumberFunction.func(5));
}

下篇我们将介绍泛型函数式接口、作为参数传递Lambda表达式、Lambda表达式与异常

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值