Java互联网架构-一篇文精通JDK8lambada表达式

一、流的概念

Java Se中对于流的操作有输入输出IO流,而Java8中引入的Stream 属于Java API中的一个新成员,它允许你以声明性方式处理数据集合,Stream 使用一种类似 SQL 语句从数据库查询数据的直观方式来提供一种对 Java 集合运算和表达的高阶抽象。 注意这里的流操作可以看做是对集合数据的处理。
最后,如果大家如果在自学遇到困难,想找一个java的学习环境,可以加入我们的java学习圈,点击我加入吧,会节约很多时间,减少很多在学习中遇到的难题。
在这里插入图片描述
简单来说,流是一种数据渠道,用于操作数据源(集合、数组、文件等)所生产的元素序列。

源-流会使用一个提供数据的源,如集合、数组或输入|输出资源。
从有序集生成流时会保留原有的顺序。由列表生成的流,其元素顺序与列表一致

元素序列-就像集合一样,流也提供了一个接口,可以访问特定元素类型的一组有序值。
数据处理操作-流的数据处理功能支持类似于数据库的操作(数据筛选、过滤、排序等操作)。
流水线-多个流操作本身会返回一个流,多个操作就可以链接起来,成为数据处理的一道流水线。
二、流 & 集合

计算的时机在这里插入图片描述
在这里插入图片描述Java互联网架构-一篇文精通JDK8lambada表达式

集合中数据都是计算完毕的数据,例如从数据库中查询用户记录 按用户id 查询 降序排列 然后通过list 接收用户记录,数据的计算已在放入集合前完成。

流中数据按需计算,按照使用者的需要计算数据,例如通过搜索引擎进行搜索,搜索出来的条目并不是全部呈现出来的,而且先显示最符合的前 10 条或者前 20 条,只有在点击 “下一页” 的时候,才会再输出新的 10 条。流的计算也是这样,当用户需要对应数据时,Stream 才会对其进行计算处理。

外部迭代与内部迭代在这里插入图片描述
在这里插入图片描述Java互联网架构-一篇文精通JDK8lambada表达式
Java互联网架构-一篇文精通JDK8lambada表达式
把集合比作一个工厂的仓库的话,一开始工厂硬件比较落后,要对货物作什么修改,此时工人亲自走进仓库对货物进行处理,有时候还要将处理后的货物转运到另一个仓库中。此时对于开发者来说需要亲自去做迭代,一个个地找到需要的货物,并进行处理,这叫做外部迭代。

当工厂发展起来后,配备了流水线作业,工厂只要根据需求设计出相应的流水线,然后工人只要把货物放到流水线上,就可以等着接收成果了,而且流水线还可以根据要求直接把货物输送到相应的仓库。这就叫做内部迭代,流水线已经帮你把迭代给完成了,你只需要说要干什么就可以了(即设计出合理的流水线)。相当于 Java8 引入的Stream 对数据的处理实现了”自动化”操作。

三、流操作过程
在这里插入图片描述
Java互联网架构-一篇文精通JDK8lambada表达式
整个流操作就是一条流水线,将元素放在流水线上一个个地进行处理。需要注意的是:很多流操作本身就会返回一个流,所以多个操作可以直接连接起来, 如下图这样,操作可以进行链式调用,并且并行流还可以实现数据流并行处理操作。
在这里插入图片描述
Java互联网架构-一篇文精通JDK8lambada表达式
总的来说,流操作过程分为三个阶段:

创建
借助数据源创建流对象

中间处理
筛选、切片、映射、排序等中间操作

终止流
匹配、汇总、分组等终止操作

四、流的创建

对流操作首先要创建对应的流,流的创建集中形式如下:
在这里插入图片描述
Java互联网架构-一篇文精通JDK8lambada表达式
4.1 集合创建流

在 Java 8 中, 集合接口有两个方法来生成流:

stream() − 为集合创建串行流。
parallelStream() − 为集合创建并行流。
示例代码如下:

Java互联网架构-一篇文精通JDK8lambada表达式
public static void main(String[] args) {

/**

  • 定义集合l1 并为集合创建串行流

*/

List l1 = Arrays.asList(“周星驰”, “周杰伦”, “周星星”, “周润发”);

// 返回串行流

l1.stream();

// 返回并行流

l1.parallelStream();

}

Java互联网架构-一篇文精通JDK8lambada表达式
上述操作得到的流是通过原始数据转换过来的流,除了这种流创建的基本操作外,对于流的创建还有以下几种方式。

4.2 值创建流

//值创建流 生成一个字符串流

Stream stream = Stream.of(“java8”, “Spring”, “SpringCloud”);

stream.forEach(System.out::println);

4.3 数组创建流

根据参数的数组类型创建对应的流。

Arrays.stream(T[ ])
Arrays.stream(int[ ])
Arrays.stream(double[ ])
Arrays.stream(long[ ])
/**

  • 这里以int 为例 long double 不再举例
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值