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原理和常见操作相关推荐

  1. java stream 原理

    java stream 原理 需求 从"Apple" "Bug" "ABC" "Dog"中选出以A开头的名字,然后从中选 ...

  2. Java 8 Stream流的常见操作

    Stream流的使用 在 Java 8 中, 集合接口有两个方法来生成流: stream() − 为集合创建串行流.parallelStream() − 为集合创建并行流. 串行流 如果是数组的话,可 ...

  3. java实现单链表常见操作,java面试题,java初级笔试题

    写在最前面,我总结出了很多互联网公司的面试题及答案,并整理成了文档,以及各种学习的进阶学习资料,免费分享给大家.扫码加微信好友进[程序员面试学习交流群],免费领取.也欢迎各位一起在群里探讨技术. 一. ...

  4. java实现单链表常见操作

    一.概述: 本文主要总结单链表常见操作的实现,包括链表结点添加.删除:链表正向遍历和反向遍历.链表排序.判断链表是否有环.是否相交.获取某一结点等. 二.概念: 链表: 一种重要的数据结构,HashM ...

  5. Java -Stream流和常见函数式接口

    概念 流(Stream)与集合类似,但集合中保存的是数据,而Stream中保存对集合或数组数据的操作. 特点 tream 自己不会存储元素. Stream 不会改变源对象.相反,他们会返回一个持有结果 ...

  6. java stream 8 常用的操作集合 求和 排序 过滤 拿出对象元素组成集合

    举个例子拿一个教师给学生开家长会Java实体 解释 stream 流操作集合建立在内存之上非常的快 以下列举 常用的操作方法 @Data public class OpenClass {private ...

  7. java 合并流_Java Stream 流实现合并操作示例

    本文实例讲述了Java Stream 流实现合并操作.分享给大家供大家参考,具体如下: 1. 前言 Java Stream Api提供了很多有用的 Api 让我们很方便将集合或者多个同类型的元素转换为 ...

  8. [源码解析] 当 Java Stream 遇见 Flink

    [源码解析] 当 Java Stream 遇见 Flink 文章目录 [源码解析] 当 Java Stream 遇见 Flink 0x00 摘要 0x01 领域 1.1 Flink 1.2 Java ...

  9. Java Stream 底层原理

    Stream API 你可能没意识到Java对函数式编程的重视程度,看看Java 8加入函数式编程扩充多少功能就清楚了.Java 8之所以费这么大功夫引入函数式编程,原因有二: 代码简洁函数式编程写出 ...

最新文章

  1. NeurIPS 2020 Oral 论文讲解
  2. java正则表达式的用法_Java 正则表达式的使用
  3. JavaWeb学习笔记①——Java向下转型在JavaEE中运用——登陆验证
  4. Linux内核源码中使用宏定义的若干技巧
  5. Oracle 提示符
  6. 计算机网络(10)-----TCP的拥塞控制
  7. 如何计算代码的运行性能
  8. 蓝桥杯 ADV-184 算法提高 素数求和
  9. javascript-mqtt
  10. 【线性代数】思维脑图
  11. 移动硬盘或U盘无法安全弹出怎么快速安全弹出?
  12. 键盘对于程序员的价值
  13. 我在飞机上,飞机在哪里?浅谈飞行模式与GPS定位
  14. SHINE与Phoenix合并,专注推进核聚变技术
  15. Python 网页爬取图片
  16. 金融数据分析 实验五 资产组合计算
  17. linux下filezilla使用教程,FTP工具filezilla使用教程
  18. 在开发板上显示彩虹c语言(800*480屏幕)
  19. 【思维导图】她提出了“计算思维”,并解释我们为什么要学会跟机器对话 | 造访·周以真【整理自公众号:造就】
  20. 微信对账单--每日定时任务获取昨日微信支付账单

热门文章

  1. [NOI2005]瑰丽华尔兹(DP+单调队列优化)
  2. 学习网页设计,你必须要去学习的知识点!
  3. 干货!高一数学辅导需要注意哪些方面?
  4. 企业宣传型网站有什么好处?
  5. 【做一下1】python 监听数据库变化
  6. redhat9调试笔记之防火墙
  7. Hfish开源蜜罐初探
  8. 动态加载图片,实现瀑布流效果
  9. c语言blue的大写字母,26个大写字母正确读法
  10. PHP搜索utf和gbk,php中判断是gbk还是utf