黑马程序员技术交流社区
标题:
[石家庄校区]就业班JavaSE高级部分day13 Stream 方法引用
[打印本页]
作者:
湿漉漉的文字控
时间:
2018-12-2 15:18
标题:
[石家庄校区]就业班JavaSE高级部分day13 Stream 方法引用
就业班JavaSE高级部分day13 Stream 方法引用
Stream流:
Stream流式思想处理数据的方式
:
让代码的执行像流水线一样
,
先设计好处理方案
,
然后一按开关开始执行
流相比于集合的2个优点
:
1.
Pipelining
(
管道特性
):
"可以链式调用"
Stream流对象的
延迟方法
调用后
,
会返回新的Stream流对象
,
可以链式调用
每个方法类似于一条一条的管道
,
衔接了不同的处理方案
2.
内部迭代特性
:
"不用写for循环"
集合遍历通过
Iterator
或者
增强for
,
显式的在集合外部进行迭代
,
这叫做外部迭代
Stream提供了内部迭代的方法
forEach
(
Consumer
c
),
可以直接调用遍历方法
使用Stream流的3个步骤
:
1.
获取数据源
(
从
"集合"
或
"数组"
转换为
"Stream"
对象
)
2.
数据处理
(
调用延迟方法
,
编写处理方案
)
3.
获得结果
(
调用终结方法
,
启动开关
)
2种获取Stream流的方式
获取Stream流对象的2种方式
:
1.
利用
"Collection接口"
中的默认方法
default
Stream
<
E
>
stream
()
方法
:
集合转Stream对象
2.
利用
"Stream接口"
中的静态方法
static
<
T
>
Stream
<
T
>
of
(
T
...
values
):
数组转Stream对象
Stream API: 方法分类
延迟方法
: (
具有延迟执行的特性
)
返回值类型
"是Stream"
类型的方法
,
支持链式调用
Stream
filter
():
过滤
Stream
map
():
映射
/
转换
Stream
limit
():
截取
Stream
skip
():
跳过
终结方法
:
返回值类型
"不是Stream"
类型的方法
,
不支持链式调用
void
forEach
():
遍历
long
count
():
统计
// 抽象方法
void
forEach
(
Consumer
<?
super
T
>
action
):
遍历流中的元素进行逐一消费
.
并不保证元素的逐一消费动作在流中是被有序执行的
Stream API: 静态方法concat()合并两个流
java
.
util
.
stream
.
Stream
<
T
>
接口
:
管道接口
// 静态方法
static
<
T
>
Stream
<
T
>
concat
(
Stream
<?
extends
T
>
a
,
Stream
<?
extends
T
>
b
):
合并两个流的元素
,
变成一个新的流
.
两个流中的元素类型必须相同
,
或有共同的父类
(扩展: 收集器)
如何理解Stream流
:
Stream不是集合
,
也不是数组
,
也不是某种数据结构
,
所以Stream内部
"不能存储"
元素
Stream是一种
"函数模型"
,
规定一些对于集合或数组的处理方案
:
在调用
"延迟方法"
时
,
就是在编写处理方案
,
但并未真正执行方案
在调用
"终结方法"
时
,
才一次性按照处理方案来操作集合
这也是流式操作
"延迟执行"
的特点
收集器的作用
:
收集Stream操作后的结果
,
转换为其他容器
对流操作完成之后
,
如果需要将其结果进行收集
,
例如转换为对应的
"集合"
或
"数组"
等
java
.
util
.
stream
.
Stream
<
T
>
接口
:
流
Object
[]
toArray
():
将当前Stream流对象转换为Object
[]
数组
<
R
,
A
>
R
collect
(
Collector
<?
super
T
,
A
,
R
>
collector
):
将当前Stream流对象根据传入的Collector转换为集合或数组
java
.
util
.
stream
.
Collectors类
:
收集器静态工具类
,
提供不同转换方式的Collector
static
<
T
>
Collector
<
T
,
?
,
List
<
T
>>
toList
():
Stream转List集合
static
<
T
>
Collector
<
T
,
?
,
Set
<
T
>>
toSet
():
Stream转Set集合
static
<
...
>
Collector
<
...
>
toMap
(
Function
<?
super
T
,
?
extends
K
>
keyMapper
,
Function
<?
super
T
,
?
extends
U
>
valueMapper
)
Stream转Map集合
.
Function
keyMapper
:
生成key的转换方式
Function
valueMapper
:
生成value的转换方式
方法引用
方法引用
:
Method
Reference
如果Lambda表达式仅仅是调用一个已经存在的方法
,
那就可以通过方法引用来替代Lambda表达式
作用
:
简化Lambda表达式
::
方法引用运算符
,
它所在的表达式被称为方法引用
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2