Lambda表达式的引入

        Java 8的最大亮点之一是引入了Lambda。使用Lambda表达式,会使得设计的代码会更加简洁,且具有可读性。

        Lambda的解释:一个被定义的且可能被调用的函数或子程序,但其却没有像普通函数或子程序那样,拥有一个固定的标识符。Lambda的简单理解:是一个包含若干表达式和语句的匿名函数(方法)。

        在某些场合下,可能我们需要一个功能块,但又不想去命名一个函数或方法,此时Lambda就派上用场了。在Java 8中,Lambda表达式就是一个带有输入参数的可执行语句块,一个匿名的方法。

        当开发者在编写Lambda表达式时,也会随之被编译成一个函数式接口。“函数式接口”是指:仅仅只包含一个抽象方法的接口,每一个该类型的Lambda表达式,都会被匹配到这个抽象方法。

        传统的创建线程的方法:

Runnable runnable1=new Runnable

{

    public void run

    {

        System.out.println("Running without Lambda");

    }

}

        如果使用Lambda表达式,其代码可以表示为:

Runnable runnable2=()->{

        System.out.println("Running withLambda");

};

        正如读者所看到的那样,使用Lambda表达式,可读性增强了,代码量也随之减少。

        Java 8中,定义一个Lambda表达式,简单来说,就是3条:

  • 方法无名
  • 参数可有
  • 箭头“->”分割

        格式如下:

(Type1 param1,Type2 param2,...TypeN paramN)->{

    语句1;

    语句2;

    语句3;

    return value;

}

    举例:用Lambda表示两个整数求和

    (int x,int y)->{return x+y;}

    对应上述三句简单的总结,详细解释说明如下:

  • 可把Lambda想象成一个没有名称的方法,该方法的参数列表(Type1 param1,Type2 param2,...TypeN paramN)和方法体{...},如同普通方法一样,这些都可以有;
  • 参数列表中的参数可有可无,如果无参数,就是一对空括号;
  • Lambda表达式不是普通方法,它有自己特殊的标记,就是一个箭头->,它用来分割参数和主体部分,主体部分用花括号{}括起来,它可以是一个表达式或一个语句块。

上面的Lambda表达式语法是完整版,写起来比较繁琐,根据不同的情况,Lambda表达式可以有各种简化版本。

<1>省略参数类型

在很多情况,编译器可从上下文中推断出Lambda的参数类型,格式简化如下:

(param1, param2,...paramN)->{

    语句1;

    语句2;

    语句3;

    return value;

}

计算两个数之和的例子,可用简化的Lambda,表示为:

(x,y)->{return x+y;}   //x和y的数据类型,可根据这条语句的上下文,自动推断得知。

<2> 省略参数表小括号

当Lambda表达式的参数只有一个时,可进一步省略参数表中的小括号,于是Lambda表达式可进一步简写为:

param1->{

    语句1;

    语句2;

    语句3;

    return value;

}

举例说明,如果求某个值x的平方,用Lambda表达式表示为:

x->{return x*x;}

<3>省略方法体大括号

当Lambda表达式只含有一条语句时,还可进一步省略方法体的大括号、return和语句结尾的分号。Lambda表达式简化为:

param1-> statement

再次用某个值x的平方,来举例说明,Lambda表达式可表示为:

x->x*x //箭头后面的是返回值x*x

Lambda表达式应用

1 代码示例

import java.util.*;
public class ListLambda {
	public static void main(String[] args){
		String[] Persons={"xiaoming","xiaoli","xiaowang"};
		List<String> players = Arrays.asList(Persons);
		//以前的循环方式
		for(String player:players)
		{
			System.out.println(player+";");
		}
		//使用Lambda表达式
		System.out.println("\n------After Lambda----------");
		players.forEach(player->System.out.println(player+";"));
	}
}

2 运行结果

xiaoming;
xiaoli;
xiaowang;

------After Lambda----------
xiaoming;
xiaoli;
xiaowang;

3 结果分析

从代码复杂度来看,使用Lambda表达式以及函数操作,代码非常简单,仅一条语句。

        Java 8的最大亮点之一是引入了Lambda。使用Lambda表达式,会使得设计的代码会更加简洁,且具有可读性。         Lambda的解释:一个被定义的且可能被调用的函数或子程序,但其却没有像普通函数或子程序那样,拥有一个固定的标识符。Lambda的简单理解:是一个包含若干表达式和语句的匿名函数(方法)。         在某些场合下,可能我们需要一个功能块,但又不想去命名一个函数或方法,此时Lambda就派上用场了。在Java 8中,Lambda表达式就是一个带有输入参数的可执行语句块,一个匿名的方法。         当开发者在编写Lambda表达式时,也会随之被编译成一个函数式接口。“函数式接口”是指:仅仅只包含一个抽象方法的接口,每一个该类型的Lambda表达式,都会被匹配到这个抽象方法。         传统的创建线程的方法: Runnable runnable1=new Runnable {     public void run     {         System.out.println("Running without Lambda");     } }         如果使用Lambda表达式,其代码可以表示为: Runnable runnable2=()->{         System.out.println("Running withLambda"); };         正如读者所看到的那样,使用Lambda表达式,可读性增强了,代码量也随之减少。         Java 8中,定义一个Lambda表达式,简单来说,就是3条:
  • 方法无名
  • 参数可有
  • 箭头“->”分割

猜你喜欢

转载自cakin24.iteye.com/blog/2324701