JAVA1.8--Lambda表达式(五)

这章咱们说一下Lambda表达式

/**
     * 一、Lambda表达式 可以把Lambda表达式理解为简洁的表示可传递的匿名函数的一种方式,Lambda表达式基于数学中的λ演算得名:
     * 它没有名称,但有参数列表、函数主体、返回类型,可能还有一个可以抛出的异常列表。 1.匿名--匿名函数(即没有函数名的函数),不像普通的方法有一个明确的名称
     * 2.函数--Lambda函数不像方法那样属于某个特定的类,但一样有参数列表、函数主体和返回类型
     * 3.传递--Lambda表达式可以作为参数传递给方法或者存储在变量中 4.简介--无需像匿名类那样写很多模板代码
     * Lambda表达式使您能够封装单个行为单元并将其传递给其他代码。如果希望对集合的每个元素、流程完成时 或流程遇到错误时执行某个操作。可以使用lambda.
     * 
     * 1.为什么要使用Lambda表达式
     * 
     * Lambda是一个匿名函数,我们可以把lambda表达式 理解为是一段可以传递的代码(将代码像数据一样进行传递
     * --行为参数化)。可以写出更简洁、更灵活的代码。作为一种更紧凑的代码风格,使Java的语言表达能力得到了提升。
     * 匿名类的一个问题是,如果您的匿名类的实现非常简单,例如一个接口只包含一个方法,那么匿名类的语法可能看
     * 起来很笨拙和不清楚。在这些情况下,您通常试图将功能作为参数传递给另一个方法,例如当有人单击按钮时应该采取
     * 什么操作。Lambda表达式允许您这么做,将功能视为方法参数,或将代码视为数据。
     * 
     * 2.Lambda表达式语法
     * 
     * (parameters) -> expression 或(parameters) ->{ statements; }
     * 
     * Lambda 表达式在 Java 语言中引入了一个新的语法元素和操作符。这个操作符为 “->” , 该操作符被称为 Lambda 操作符或剪头操作符。它将
     * Lambda 分为两个部分:
     * 
     * 左侧:指定了Lambda表达式需要的所有参数
     * 
     * 右侧:指定了Lambda体,即Lambda表达式要执行的功能
     * 
     * 3.Lambda表达式实例
     * 
     * 官方提供的示例,假设你要开发一个社交软件,那个缺打的PM成天改需求,今天要查询出成年用户的信息,
     * 明天又要查询成年女性的用户信息,后天又要按各种奇怪的搜索条件查询。这时的程序员:
     * 从简单的用户遍历比较方法改为通用的搜索方法到后来都用上了工厂模式,等到第7天的时候,你不耐烦了,
     * 玛德,每个条件就一句话,我写了7个类,我可不想做CtrlCV工程师,这时候Lambda表达式是你的不二之选。
     * 
     * 行为参数化就是可以帮助你处理频繁变更的需求的一种软件开发模式。
     * 
     * 官方提供的Demo,一步步告诉你使用java8的好处(从值参数化到行为参数化)
     * 
     * 新建一个Person类具体代码见本项目
     * 
     */

具体代码如下:

public class LambdaInfo {
	public static void main(String[] args) {
		
		//1.无参,无返回,Lambda体只需要一条语句
		Runnable runnable = () -> System.out.println("Hello Lambda");
		
		//2.Lambda需要一个参数
		Consumer<String> consumer = (p) -> System.out.println(p);
		
		//Lambda只需要一个参数时,参数的小括号可以省略
		Consumer<String> consumer1 = p -> System.out.println(p);
		
		//3.Lambda需要两个参数,并且有返回值
		BinaryOperator<Long> binaryOperator = (Long x,Long y) -> {
			System.out.println("实现函数接口的方法");
			return x+y;
		};
		
		//参数的数据类型可以省略,Java8增强了类型推断,且当Lambda体只有一条语句时,return与大括号可以省略
		BinaryOperator<Long> binaryOperator2 = (x,y) -> x+y;
		
		/**
		 * 类型推断
		 * 
		 * 上述Lambda表达式中的参数类型都是有编译器推断出的。Lambda表达式中无需指定类型,程序依然可以编译,
		 * 这是因为javac根据程序的上下文,在后台推断出了参数的类型。Lambda表达式的类型依赖于上下文环境,是
		 * 由编译器推断出来的,这就是所谓的“类型推断”。Java7中引入的菱形运算符(<>),就是利用泛型从上下文
		 * 推断类型
		 * 
		 * */
		
	}
	
}

源码下载地址:https://download.csdn.net/download/qq_20410965/12434193

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值