Stream常用操作以及原理探索

stream抓包+推送phone实战 最近需要办理某个业务,发现天河区的余号一直为0。突然想到前阵子看过一篇文章,作者在叮咚上一直抢不到菜。通过抓包获取小程序的接口请求数据,然后定时去调用这个接口,判断有菜就自动发推送到手机。于是,周五晚上我也捣鼓了几个小时。发现也可以实现这种半自动化的功能。 下载安装抓包工具 首先,需要通过抓包工具获取小程序的api接口请求数据 我用的是抓包工具是手机app:stream。(在appstore直接下载) 默认安装后是无法抓取 https 类型的,需要在设置里进行相关配置: 如果您要抓取 HTTPS 的请求 阅读详情

Stream是什么?

Stream是一个高级迭代器,它不是数据结构,不能存储数据。它可以用来实现内部迭代,内部迭代相比平常的外部迭代,它可以实现并行求值(高效,外部迭代要自己定义线程池实现多线程来实现高效处理)、惰性求值(中没有终止操作,中间操作是不会执行的)、短路操作(拿到正确的结果就返回,不需要等到整个过程完成之后)等

  • Stream翻译过来的意思就是“溪流,流”的意思,而我们刚开始学习java的时候接触最多的就是IO流,它更像“农夫山泉”,“我们只做大自然的搬运工”,只是将一个文件从这个地方传到另一个地方,对于文件当中内容不做任何增删改操作,而Stream就会,也就是将要处理的数据当作流,在管道中进行传输,并在管道中的每个节点对数据进行处理,如过滤、排序、转换等;

  • 通常我们需要处理的数据是以 Collection 、Array等数据来源;

  • Stream它是Java8中的一个新特性,那关于Java8中的其他新特性内容可以参考这篇文章 《Java8新特性实战》 ;

  • 那既然是Java8的新特性,而且我们也知道Java8大改动之一的就是增加了函数式编程,而Stream就主角,那有关函数式编程是什么,可以参考知乎上的一篇文章 《什么是函数式编程?》 ;

  • 既然是函数式编程,所以通常是配合Lambda表达式使用;

Stream怎么用?

所有操作分类

首先Stream的所有操作可分为两类, 一是中间操作 , 二是终止操作

中间操作:中间操作只是一种标记,只有结束操作才会触发实际计算

  • 无状态 :指元素的处理不受前面元素的影响;
  • 有状态: 有状态的中间操作必须等到所有元素处理之后才知道最终结果,比如排序是有状态操作,在读取所有元素之前并不能确定排序结果。

终止操作:顾名思义,就是得出最后计算结果的操作

  • 短路操作: 指不用处理全部元素就可以返回结果;
  • 非短路操作: 指必须处理所有元素才能得到最终结果。

此外这里我看到有的地方将collect定义为了中间操作,但通过我看了大部分对Stream的介绍,发现Collect这个收集操作是最终止操作,毕竟这也符合我们平时所用到它的场景,所以还请加以辨别有的文章中提到的collect是中间操作的错误解释。

常用操作

以下两张图是对stream的常用操作做了一个简单使用案例,原本流程图在这 Java8新特性

那至于常用操作这块,本次博客也不在进行过多的细说,因为网上有很多这种使用类型的文章,我常看的有这三篇文章:

为什么使用Stream?

声明式处理数据

第一个原因我觉得是Stream流可以以声明式的方式去处理数据,也就是像它其中就有filter、sort这种以及写好的操作,只需要拿来使用即可,如果我们平时使用for循环,还要在for循环中自己去写怎么过滤的这些操作,最后才得出自己想要的结果,对比这种命令式的操作

可以说让我们代码更加干净、简洁。

对比for循环

对于与for循环效率的对比,我觉得和以下内容差不多,但搜寻网上资料来证明某一观点正确的我目前没有找到,很多人持有观点就是“牺牲代码效率来换取代码简洁度”,“Stream的优势在于有并行处理”,“Stream的效率与for差不多,为了代码简洁更偏向Stream”等。

但是牺牲代码效率换代码简洁度我觉得还是有问题的,不能一概而论。但是函数式编程的优点就是代码简洁,多核友好并行处理这是不可否认的。

  • 针对不同的数据结构,Stream流的执行效率是不一
Stream流常用操作 Java Stream流 阅读详情

相关推荐

漏洞修复: Web服务器限制只允许通过GET/POST请求

http请求中的8种请求方法 1、opions 返回服务器针对特定资源所支持的HTML请求方法 或web服务器发送测试服务器功能(允许客户端查看服务器性能) 2、Get 向特定资源发出请求(请求指定页面信息,并返回实体主体) 3、Post 向指定资源提交数据进行处理请求(提交表单、上传文件),又可能导致新的资源的建立或原有资源的修改 4、Put 向指定资源位置上上传其最新内容(从客户端向服务器传送的数据取代指定文档的内容) 5、Head 与服务器索与get请求一致的相应,响应体不会返回,获取包含在小消息头

Bertram的博客 2583

深入探索C#中的Stream:数据流的奥秘与应用

它不仅为我们提供了一种统一的方式来处理各种类型的输入输出操作,还极大地简化了文件、网络通信、内存数据等场景下的数据读写。在C#中扮演着至关重要的角色,它不仅提供了一种统一的接口来处理各种输入输出操作,还使得我们可以以相似的方式处理不同来源和格式的数据。,这些方法允许在不阻塞主线程的情况下进行数据的读写操作,这对于提高应用程序的响应性和性能至关重要。的工作原理和应用,你将能够更加高效地处理文件、网络通信以及其他数据流相关的场景。是如何工作的,以及它在我们日常编程中的强大应用。是C#中所有流的抽象基类,位于。

墨夶的博客 1192

Java Stream API:函数式编程入门

📚 Java Stream API是Java 8中引入的一个强大的新特性,它允许我们以声明式的方式处理集合数据。Stream API提供了一种高效、易于阅读和编写的方式来处理数据集合,支持并行处理,并且能够简化代码。

java专栏 789

Java Stream流畅编程:优雅而高效的代码创作

🔥关注墨瑾轩,带你探索编程的奥秘!🚀🔥超萌技术攻略,轻松晋级编程高手🚀🔥技术宝库已备好,就等你来挖掘🚀🔥订阅墨瑾轩,智趣学习不孤单🚀🔥即刻启航,编程之旅更有趣🚀Stream流编程,就像是编程界的魔法师,它挥舞着魔杖,让繁琐的数据处理变得优雅而高效。想象一下,你不再是亲手去搬动每一块砖头建造城堡,而是指挥着一群勤劳的小精灵,自动完成这项任务。这就是Stream的魅力所在!

java专栏 1001

深入探索Spring Cloud Stream与RabbitMQ的集成实践

在当今微服务架构的流行趋势下,消息驱动的架构模式被广泛采纳,以实现服务间的异步通信和解耦。Spring Cloud Stream,作为Spring Cloud家族的一员,就是为了解决分布式系统的消息通信问题而生的。它提供了一套统一的编程模型,简化了消息中间件的开发工作,使得开发者可以专注于业务逻辑的实现,而不是消息中间件的细节。Spring Cloud Stream 通过定义统一的消息通道,使得不同的消息中间件如 RabbitMQ 和 Kafka 可以无缝切换。

weixin_29155599的博客 835

非模式物种PySCENIC分析流程

外的物种想要做scenic分析的话, 可以使用同源基因转换后再进行分析, 将要分析的物种的gene Symbol转换为人、小鼠或者是果蝇的gene Symbol后进行分析。odiscus sinensis(中华鳖)的基因-细胞的矩阵,进行pyscenic分析的话,可参考以下示例。目前pyscenic分析支持的物种仅为人、小鼠和果蝇,其他物种暂时还没有相应的数据库,因。本教程基于Linux及服务。SCENIC转录因子分析。器中的Rstudio环境。例如我们有一个Pel。

weixin_47195452的博客 934

光猫改桥接后,一根网线搞定IPTV和上网的保姆级教程(附VLAN配置避坑点)

本文详细介绍了光猫改桥接后如何通过单线复用技术实现IPTV和上网功能共存。从VLAN配置原理到具体操作步骤,包括光猫超级管理员权限获取、VLAN绑定设置及路由器IPTV功能配置,提供了全面的保姆级教程。特别针对常见问题如IPTV信号丢失、网速下降等给出了实用解决方案,帮助用户轻松避坑。

weixin_29927965的博客 1757

《通信工程施工与管理》

制作馈线接头必须使用专用的工具,专用工具包括:馈线切割刀、馈线安全刀、小金属丝毛刷、固定尺寸或大号活动扳手、小号扁锉刀、细齿小手锯、接头扩孔器、3M防水胶或防水接头盒;如图所示,详情如表所示。

2302_78710464的博客 1653

Markdown编辑器介绍

这篇文章介绍了Markdown编辑器的功能和使用方法。主要内容包括:Markdown的基本语法如标题、列表、链接插入等;新增功能如图片拖拽、数学公式支持、甘特图和UML图表绘制;常用快捷键说明;以及文本导出导入操作。文章详细说明了如何通过Markdown语法实现文本格式化、代码高亮、表格创建等功能,并提供了多种图表绘制的语法示例,帮助用户更好地利用Markdown编辑器进行写作和内容创作。

soso1968的博客 1181

利用gprMax与Matlab实现SFCW雷达信号的高效仿真与优化

本文详细介绍了如何结合gprMax与Matlab实现SFCW雷达信号的高效仿真与优化。通过利用gprMax获取地下场景的冲激响应,并在Matlab中运用卷积与信号处理技术,可大幅提升SFCW雷达系统仿真的效率与灵活性,为探地雷达研究与设计提供强大工具。

book8的博客 706

ShardingSphere-JDBC-若依框架集成(SpringBoot)

ShardingSphere基础知识、ShardingSphere-JDBC如何集成进若依框架中 使用的是若依框架前后端版本、动态数据源,可自行切换,默认数据源为达梦8代理端,

编程小菜鸟的笔记 8168

大数据安全 | 期末复习(上)| 补档

大数据定义:无法在一定时间范围内用常规软件工具进行捕捉、管理和处理的数据集合,是需要新处理模式才能具有更强的决策力、洞察发现力和流程优化能力的海量、高增长率和多样化的信息资产。

知识库搭建ing 2589

安川机器人外部轴添加

本文详细介绍了如何在安川机器人本体上添加第7轴以及如何设置动作,本文以添加点焊枪为例进行讲解。

haier123888的博客 7892

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

上一篇: Java岗最全面试攻略,吃透25个技术栈,Offer拿到手软,直捣秋招
下一篇: Spring Data JPA系列——Spring声明式数事务处理与多数据源支持
JavaShark
博客等级 码龄4年 184粉丝 438原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值