JAVA Stream原理和常见操作
1.Stream原理
Stream是JAVA8开始的新的用法。Stream本意为流,Stream也确实如流一样,给操作带来了方便。
Stream的表现是:
1)提供一个特定类型的队列;
2)提供一系列操作,让队列拥有类似于SQL语句的操作。
Stream的原理或背后的基本支持是ForkJoinPool。ForkJoinPool主要用来使用分治法(Divide-and-Conquer Algorithm) 来解决问题,即把多个大任务分割为多个小型子任务。
但该任务的缺点是:如果子任务没有完成,整个总任务也没法进行完成和归并。
ForkJoinPool的解决方式是:
1)提供双向队列;
2)空的任务从别的队列的队尾中取数据,从而让任务均分和不空闲,也让整体任务进行得更快。
值得注意的是,ForkJoinPool提供了线程池,每个任务一个线程,并试图让不同线程绑定不同CPU,从而让整个任务更加高效。
新的Stream,也支持Lamba函数(匿名函数),从而让整个过程和类型无关。
2.常见操作
Stream的常见操作分为如下几类:
无状态:指元素的处理不受之前元素的影响;
有状态:指该操作只有拿到所有元素之后才能继续下去。
非短路操作:指必须处理所有元素才能得到最终结果;
短路操作:指遇到某些符合条件的元素就可以得到最终结果,如 A || B,只要A为true,则无需判断B的结果。
可以进行的SQL语句如Select a, b from C where C.d = 2可以用如下语句实现:
list
.stream
.filter(e -> e.d == 2)
.map(e -> {
Class AB = new Class();
AB.a = e.a;
AB.b = e.b;
return AB;
})
.collect(Collectors.toList());
3.总结
Stream带来了便利,但依然不能完全替代SQL;比如,不能做到两个表的类似SQL的Join操作。必须自己写程序实现。
Stream其实提供了一系列操作方便的接口(API);如果想用,直接用即可,不用关心底层实现。这个结论,让笔者想起一个工程师前辈跟我说过的话:算法和数据结构的关系是什么,算法的具体实现,是依赖于数据结构的;但算法其实是提供一个通用的方法,让使用者不关心具体的数据结构和实现方式。
而计算机的性能越来越高,提供通用的方式,才是工程师最应该关心的事情。
JAVA Stream原理和常见操作相关推荐
- java stream 原理
java stream 原理 需求 从"Apple" "Bug" "ABC" "Dog"中选出以A开头的名字,然后从中选 ...
- Java 8 Stream流的常见操作
Stream流的使用 在 Java 8 中, 集合接口有两个方法来生成流: stream() − 为集合创建串行流.parallelStream() − 为集合创建并行流. 串行流 如果是数组的话,可 ...
- java实现单链表常见操作,java面试题,java初级笔试题
写在最前面,我总结出了很多互联网公司的面试题及答案,并整理成了文档,以及各种学习的进阶学习资料,免费分享给大家.扫码加微信好友进[程序员面试学习交流群],免费领取.也欢迎各位一起在群里探讨技术. 一. ...
- java实现单链表常见操作
一.概述: 本文主要总结单链表常见操作的实现,包括链表结点添加.删除:链表正向遍历和反向遍历.链表排序.判断链表是否有环.是否相交.获取某一结点等. 二.概念: 链表: 一种重要的数据结构,HashM ...
- Java -Stream流和常见函数式接口
概念 流(Stream)与集合类似,但集合中保存的是数据,而Stream中保存对集合或数组数据的操作. 特点 tream 自己不会存储元素. Stream 不会改变源对象.相反,他们会返回一个持有结果 ...
- java stream 8 常用的操作集合 求和 排序 过滤 拿出对象元素组成集合
举个例子拿一个教师给学生开家长会Java实体 解释 stream 流操作集合建立在内存之上非常的快 以下列举 常用的操作方法 @Data public class OpenClass {private ...
- java 合并流_Java Stream 流实现合并操作示例
本文实例讲述了Java Stream 流实现合并操作.分享给大家供大家参考,具体如下: 1. 前言 Java Stream Api提供了很多有用的 Api 让我们很方便将集合或者多个同类型的元素转换为 ...
- [源码解析] 当 Java Stream 遇见 Flink
[源码解析] 当 Java Stream 遇见 Flink 文章目录 [源码解析] 当 Java Stream 遇见 Flink 0x00 摘要 0x01 领域 1.1 Flink 1.2 Java ...
- Java Stream 底层原理
Stream API 你可能没意识到Java对函数式编程的重视程度,看看Java 8加入函数式编程扩充多少功能就清楚了.Java 8之所以费这么大功夫引入函数式编程,原因有二: 代码简洁函数式编程写出 ...
最新文章
- NeurIPS 2020 Oral 论文讲解
- java正则表达式的用法_Java 正则表达式的使用
- JavaWeb学习笔记①——Java向下转型在JavaEE中运用——登陆验证
- Linux内核源码中使用宏定义的若干技巧
- Oracle 提示符
- 计算机网络(10)-----TCP的拥塞控制
- 如何计算代码的运行性能
- 蓝桥杯 ADV-184 算法提高 素数求和
- javascript-mqtt
- 【线性代数】思维脑图
- 移动硬盘或U盘无法安全弹出怎么快速安全弹出?
- 键盘对于程序员的价值
- 我在飞机上,飞机在哪里?浅谈飞行模式与GPS定位
- SHINE与Phoenix合并,专注推进核聚变技术
- Python 网页爬取图片
- 金融数据分析 实验五 资产组合计算
- linux下filezilla使用教程,FTP工具filezilla使用教程
- 在开发板上显示彩虹c语言(800*480屏幕)
- 【思维导图】她提出了“计算思维”,并解释我们为什么要学会跟机器对话 | 造访·周以真【整理自公众号:造就】
- 微信对账单--每日定时任务获取昨日微信支付账单