没有合适的资源?快使用搜索试试~ 我知道了~
首页Java8 新特性之lamdba表达式和Optional
1 Lambda表达式 2 1.1 Lambda语法糖 2 1.1.1 语法 2 1.1.2 Lambda表达式可使用的变量 3 1.1.3 lambda表达式中的this概念 3 1.2 函数式接口- Consumer/Predicate/Function/Supplier 4 1.1.4 什么是函数式接口 4 1.1.5 Consumer接口 5 1.1.6 Function接口 6 1.1.7 Supplier接口 8 1.1.8 Predicate接口 9 1.3 方法引用和构造器 12 1.2.1 方法引用 12 1.2.2 构造器 12 1.4 Stream语法 13 1.3.1 入门案例 13 1.3.2 怎么得到Stream 15 1.3.3 转换Stream 16 1.3.4 汇聚Stream 19 2 Optional类 20 2.1 创建Optional容器 21 2.2 容器简单方法 22 2.3 容器进阶方法 23 1.3.5 ifPresent方法 23 1.3.6 orElseGet和orElseThrow方法 23 1.3.7 filter方法 24 1.3.8 map方法 24 1.3.9 flatMap方法 25 2.4 总结 25
资源详情
资源评论
资源推荐
Java8 新特性
目录
Java 新特性 ....................................................................................................................................................1
1 Lambda 表达式 ....................................................................................................................................2
1.1 Lambda 语法糖 .......................................................................................................................2
1.1.1 语法 ..............................................................................................................................2
1.1.2 Lambda 表达式可使用的变量 ...............................................................................3
1.1.3 lambda 表达式中的 this 概念.................................................................................3
1.2 函数式接口- Consumer/Predicate/Function/Supplier ..................................................4
1.1.4 什么是函数式接口 ....................................................................................................4
1.1.5 Consumer 接口 ..........................................................................................................5
1.1.6 Function 接口 .............................................................................................................6
1.1.7 Supplier 接口 ..............................................................................................................8
1.1.8 Predicate 接口 ............................................................................................................9
1.3 方法引用和构造器 .............................................................................................................. 12
1.2.1 方法引用................................................................................................................... 12
1.2.2 构造器 ....................................................................................................................... 12
1.4 Stream 语法 .......................................................................................................................... 13
1.3.1 入门案例................................................................................................................... 13
1.3.2 怎么得到 Stream .................................................................................................... 15
1.3.3 转换 Stream ............................................................................................................. 16
1.3.4 汇聚 Stream ............................................................................................................. 19
2 Optional 类......................................................................................................................................... 20
2.1 创建 Optional 容器 ............................................................................................................. 21
2.2 容器简单方法 ....................................................................................................................... 22
2.3 容器进阶方法 ....................................................................................................................... 23
1.3.5 ifPresent 方法 .......................................................................................................... 23
1.3.6 orElseGet 和 orElseThrow 方法 ........................................................................... 23
1.3.7 filter 方法 .................................................................................................................. 24
1.3.8 map 方法 .................................................................................................................. 24
1.3.9 flatMap 方法 ............................................................................................................ 25
2.4 总结 ........................................................................................................................................ 25
1 Lambda 表达式
1.1 Lambda 语法糖
在函数式编程语言中,Lambda 表达式的类型是函数。而在 Java 中,Lambda 表达式是
对象,它们必须依附于一类特别的对象类型——函数式接口(Functional Interface)。
使用 lambda 表达式来创建一个函数式接口实例,那这个 lambda 表达式的入参和返回
必须符合这个函数式接口中唯一的抽象方法的定义。
List<Integer> list = Arrays.
asList
(1,2,3,4,5,6);
list.forEach(new Consumer<Integer>() {
@Override
public void accept(Integer integer) {
System.
out
.println(integer);
}
});
// Lambda 表达式将上面的方式进行改进,接收一个参数 不返回值
list.forEach(s-> System.
out
.println(s));
1.1.1 语法
1) 一般语法
(方法参数) -> 方法实现
(Type1 param1, Type2 param2, ..., TypeN paramN) -> {
statment1;
statment2;
//.............
return statmentM;
}
2) 单参数语法
用于方法只有一个参数情况,可以省略小括号
param1 -> {
statment1;
statment2;
//.............
return statmentM;
}
3) 单语句写法
当 lambda 表达式只包含一条语句时,可以省略大括号、return 和语句结尾的分号
param1 -> statement
4) 方法引用写法(也是 Java8 新特性 后面介绍)
Class or instance :: method
1.1.2 Lambda 表达式可使用的变量
lambda 表达式可以访问给它传递的变量,访问自己内部定义的变量,同时也能访问它
外部的变量。
访问外部变量的限制:变量不可变(只是引用不可变,而不是真正的不可变),隐式的
当作 final 来处理。
// lambda 表达式可使用的变量
// 外部变量,传递变量,内部变量
String outer = "lambda";
List<String> proStr = Arrays.
asList
("hello","world");
List<String> extStr = proStr
.stream()
.map(inner -> {
Long custom = System.
currentTimeMillis
();
return outer + "," + inner + "," + custom;
})
.collect(Collectors.
toList
());
extStr.forEach(System.
out
:: println);
1.1.3 lambda 表达式中的 this 概念
在 lambda 中,this 不是指向 lambda 表达式产生的那个 SAM 对象,而是声明它的外部对象。
public static void main(String[] args) {
Lambda lambda = new Lambda();
// test.Lambda
// test.Lambda
lambda.whatThis();
}
public void whatThis(){
List<String> list = Arrays.
asList
("hello","world");
list
.stream()
.map(s -> {
System.
out
.println(this.getClass().getName());
return s.toUpperCase();
})
.collect(Collectors.
toList
());
}
1.2 函数式接口- Consumer/Predicate/Function/Supplier
type
description
速记
Consumer< T >
接收 T 对象,不返回值
消费者;只消费,无返回值
Predicate< T >
接收 T 对象并返回 boolean
断言,断定;进行判断,返
回 boolean
Function< T, R >
接收 T 对象,返回 R 对象
函数;有返回值,返回对象
Supplier< T >
提供 T 对象(例如工厂),不接收值
提供者;用于提供对象
UnaryOperator
接收 T 对象,返回 T 对象
BinaryOperator
接收两个 T 对象,返回 T 对象
1.1.4 什么是函数式接口
JDK 1.8 API 包含了很多内建的函数式接口,在老 Java 中常用到的比如 Comparator 或
者 Runnable 接口,这些接口都增加了@FunctionalInterface 注解以便能用在 lambda 上。
标注为 FunctionalInterface 的接口被称为函数式接口,该接口只能有一个自定义方法,
但是可以包括从 object 类继承而来的方法。如果一个接口只有一个方法,则编译器会认为
这就是一个函数式接口。
@FunctionalInterface
public interface Comparator<T> {
int compare(T o1, T o2);
…
}
1.1.5 Consumer 接口
@FunctionalInterface
public interface Consumer<T> {
/**
* Performs this operation on the given argument.
* 对给定的参数 T 执行定义的操作,因为没有出参,常用于打印、发送短
信等消费动作
* @param t the input argument
*/
void accept(T t);
// 对给定的参数 T 执行定义的操作执行再继续执行 after 定义的操作
default Consumer<T> andThen(Consumer<? super T> after) {
Objects.
requireNonNull
(after);
return (T t) -> { accept(t); after.accept(t); };
}
}
public class Demo_0 {
public static void main(String[] args) {
Consumer<Integer> consumer1 = (x) -> {
int a = x * x;
System.
out
.println(a);
};
Consumer<Integer> consumer2 = x -> System.
out
.println(x + x);
// accept()方法
consumer1.accept(10);
// andThen()方法,先 accept 20,再 andThen 100
consumer2.andThen(consumer1).accept(10);
}
}
void forEach(Consumer<? super T> action);
List<Integer> list = Arrays.
asList
(1,2,3,4);
list.forEach(System.
out
:: println);
剩余24页未读,继续阅读
新新许愿树
- 粉丝: 242
- 资源: 14
上传资源 快速赚钱
- 我的内容管理 收起
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
会员权益专享
最新资源
- zigbee-cluster-library-specification
- JSBSim Reference Manual
- c++校园超市商品信息管理系统课程设计说明书(含源代码) (2).pdf
- 建筑供配电系统相关课件.pptx
- 企业管理规章制度及管理模式.doc
- vb打开摄像头.doc
- 云计算-可信计算中认证协议改进方案.pdf
- [详细完整版]单片机编程4.ppt
- c语言常用算法.pdf
- c++经典程序代码大全.pdf
- 单片机数字时钟资料.doc
- 11项目管理前沿1.0.pptx
- 基于ssm的“魅力”繁峙宣传网站的设计与实现论文.doc
- 智慧交通综合解决方案.pptx
- 建筑防潮设计-PowerPointPresentati.pptx
- SPC统计过程控制程序.pptx
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0