JDK1.8学习笔记1-Lambda表达式

Lambda表达式—是一种表示匿名函数,闭包的运算符

1. 需要Lambda表达式的原因

  • 在Java中,我们无法将函数最为参数传递给一个方法,也无法声明返回一个函数的方法
  • JavaScript中,函数参数是一个函数,返回值是另一个函数的情况是非常常见的—JavaScript是一门非常典型的函数式语言

其作用是

  • 传递行为,而不仅仅是值
  • 提升抽象层次
  • API重用性更好
  • 更加灵活

1.1 Lambda表达式的基本结构

(param1, param2, param3,...)->{
	//code
}

1.2 函数式接口

关于函数式接口

  • 如果一个接口只有一个抽象方法,那么该接口就是一个函数式接口
  • 如果我们在某个接口上声明了@FunctionalInterface注解,那么编译器就是按照函数式接口的定义来要求该接口
  • 如果某个接口只有一个抽象方法,但我们并没有给该接口声明@FunctionalInterface注解,那么编译器依旧会将该接口看作是函数式接口
  • 如果一个函数式接口声明的抽象方法重写了java.lang.Object中的方法,那么其抽象方法个数不会因此而增加

函数式接口需满足两个条件

  • 使用 FunctionalInterface注解的类型是接口类型而不是注解,枚举或类
  • 注解类型满足函数式接口的要求

1.3 Lambda表达式的作用

  • Lambda表达式为Java添加了缺失的函数式编程特性,使我们能将函数当做一等公民看待
  • 在将函数左右一等公民的语言中,Lambda表达式的类型是函数,但在Java语言中,Lambda表达式是对象,他们必须依附于一类特别的对象类型—函数式接口functional interface

1.3 函数式接口的实现方式

  • Lambda表达式
  • 方法引用
  • 构造方法引用

2. Java中Lambda表达式

1 在Java中的特点Lambda表达式的特点

  • 是一种匿名函数
  • 没有声明的方法—没有访问修饰符,返回值声明和方法

2 Java Lambda基本语法

//Java中的Lambda表达式基本语法
(argument) -> (body)
//比如说
(arg1, arg2) -> {body}
(type1 arg1, type2 arg1...)->{body}

3.Lambda实例说明

(int a, int b)->{return a+b;}
()->{System.out.println("Hello World");}
(String s)->{System.out.println(s);}
()->42
()->{return 3.1415}

4.Lambda表达式结构

  • 一个Lambda表达式时可以有零个或多个参数
  • 参数的类型既可以明确声明,也可以根据上下文来推断—(int a)(a)效果相同
  • 所有参数需要包含在()圆括号内,参数之间用逗号相隔—(a, b)或者(int a, int b)(String a, int b, float c)
  • ()圆括号代表参数集为空—()->42
  • 当只要一个参数时,且其类型可推导时,圆括号()可省略—a->return a*a
  • 表达式的主体可包含零条或多条语句
  • 如果表达式的主体只有一条语句时,花括号{}可省略(匿名函数的返回类型与该主体表达式一致)
  • 如果表达式的主体包含一条以上语句时,咋表达式必须包含在花括号{}内(行程代码块). 匿名函数的返回类型与代码块的返回类型一致,若没有则返回空

5.Lambda表达式类型

  • Statement Lambda—语句Lambda
Supplier<String> supplier = () -> {return "hello world";};
  • expression Lambda—表达式Lambda
Supplier<String> supplier = () -> "hello world";

两者实现的效果是一致的,只是语法上存在差异
Statement Lambda中的代码有且只有一行时,去掉{},return,;后可以转为expression Lambda,即后者是前者的简化版本.

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值