java由入门到精通第五版资源,Java进阶,腾讯后台开发

前言

作为一个有丰富经验的微服务系统架构师,经常有人问我,“应该选择RabbitMQ还是Kafka?”

基于某些原因, 许多开发者会把这两种技术当做等价的来看待。的确,在一些案例场景下选择RabbitMQ还是Kafka没什么差别,但是这两种技术在底层实现方面是有许多差异的。

不同的场景需要不同的解决方案,选错一个方案能够严重的影响你对软件的设计,开发和维护的能力。

这篇文章会先介绍RabbitMQ和Apache Kafka内部实现的相关概念。紧接着会主要介绍这两种技术的主要不同点以及他们各自的优缺点,最后我们会说明一下怎样选择这两种技术。

Stream,翻译成流,流一般用来对数据进行操作,比如IO流,就是对文件的二进制数据进行操作,常用来序列化

流其实就是数据的渠道,用来操作数据源所生成的元素序列的!

  • Stream不会自己存储元素,其就是元素序列而已

  • Stream不会改变原来对象,可以利用流去产生一个持有结果的stream,再产生新对象

  • Stream的操作是延迟执行的,要等到需要结果的时候才会去执行

对Stream的操作

流一般来源于数据源(文件、集合、数组),所以,有数据源才有流,有了数据源,我们就可以获取其流,进行一系列的流水操作,比如过滤、转换等从而形成一个新流!可以利用新流来产生新的数据对象!

  • 利用一个数据源去获取Stream

  • 对Stream进行中间操作,即一系列流水线操作

  • 终止操作,得到需要的结果

获取Stream操作

通过Collection系列集合提供的Stream,可以获取流

  • stream:串行流

  • paralleStream:并行流

通过Arrays中的静态方法stream去获取数组流

  • stream方法

通过Strean类中的静态方法

  • of方法

创建无限流

  • Stream.iterate(seed,operation) :迭代方式,(给一个种子,给一个成长方程,这个流就会按照成长方程一直生长)

  • Stream.generate:生成方式,无限地按规则去生成流

在这里插入图片描述

中间操作,一系列流水操作

要注意一点

中间操作是不会立刻执行的,只有做了终止操作,才会去执行中间操作,并且是一次性的,这个过程就称为惰性延迟,即延迟执行!!!并且执行会发送迭代操作(循环),而且为内部迭代(Stream自身内部的API完成的),而外部迭代为我们自己外部写的循环

过滤、截断、跳过、筛选
过滤:stream的filter方法

其需要的参数为一个Predicate接口(四大函数接口之一),就是一个判断接口!从流中可以去除某些元素

截断:stream的limit方法

截断流可以让元素不超过给定数量,本质上就是限制了内部迭代的次数!并且要注意,多个流水操作只会迭代一次,比如使用了filter再进行limit,不会filter迭代一次,然后limit迭代一次!!!只会两个流水操作同时进行迭代,这个过程称为短路,可以进行提高效率的!一旦发现满足条件的数据就直接返回

跳过:stream的skip方法

返回一个扔掉了前n个元素的流,若流中的元素不足n个,则会返回一个空流

筛选:stream的distinct方法

可以使用distinct来进行去重,本质上是通过流所生成元素的hashCode和equals方法进行去除重复元素的,所以使用这个方法要重写hashCode和equals方法

映射

这里要清楚,集合或数组得到的Stream,本质上是Stream,即里面的元素就是一个Stream,而外层的那个容器也是Stream,里面装有元素Stream

映射对应的方法就是stream的map方法

将元素转化成其他形式或者提取形式,本质上是接受一个函数(Function接口,四大函数式接口之一)作为参数,然后这个函数会被作用到流中的每个元素,从而产生一个新元素!(传递的Function接口的返回值就变成一个新元素)

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值