首页
学习
活动
专区
圈层
工具
发布

Java 8 Stream Api 中的 peek 操作

前言 我在Java8 Stream API 详细使用指南[1] 中讲述了 [Java 8 Stream API]( "Java 8 Stream API") 中 map 操作和 flatMap 操作的区别...顾名思义 peek 操作会按照 Consumer 函数提供的逻辑去消费流中的每一个元素,同时有可能改变元素内部的一些属性。这里我们要提一下这个 Consumer 以理解 什么是消费。...通常分为 最终的消费 (foreach 之类的)和 归纳 (collect)两类。还有重要的一点就是终端操作启动了流在管道中的流动。...这是他们之间的最大区别。那么 peek 实际中我们会用于哪些场景呢?比如对 Collection 中的 T 的某些属性进行批处理的时候用 peek 操作就比较合适。...如果我们要从 Collection 中获取 T 的某个属性的集合时用 map 也就最好不过了。 4.

1.9K21

Java 8 Stream Api 中的 peek 操作

顾名思义 peek 操作会按照 Consumer 函数提供的逻辑去消费流中的每一个元素,同时有可能改变元素内部的一些属性。 这里我们要提一下这个 Consumer 以理解 什么是消费。...这是因为流的生命周期有三个阶段:起始生成阶段。中间操作会逐一获取元素并进行处理。 可有可无。所有中间操作都是惰性的,因此,流在管道中流动之前,任何操作都不会产生任何影响。终端操作。...通常分为 最终的消费 (foreach 之类的)和 归纳 (collect)两类。还有重要的一点就是终端操作启动了流在管道中的流动。...这是他们之间的最大区别。 那么 peek 实际中我们会用于哪些场景呢?比如对 Stream 中的 T 的某些属性进行批处理的时候用 peek 操作就比较合适。...如果我们要从 Stream 中获取 T 的某个属性的集合时用 map 也就最好不过了。4. 总结我们今天了解 Stream 的 peek 操作,同时也回顾了 Stream 的生命周期。

26310
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Java 8 Stream Api 中的 skip 和 limit 操作

    前言 Java 8 Stream API 中的skip()和limit()方法具有类似的作用。它们都是对流进行裁剪的中间方法。今天我们来探讨一下这两个方法。...2. skip() skip(lang n) 是一个跳过前 n 个元素的中间流操作。我们编写一个简单的方法来进行skip操作,将流剩下的元素打印出来。...感觉跟 mysq 的分页有异曲同工之妙。 4. 区别 这两个方法都是截取了流。但是它们有一些区别 skip 操作必须时刻监测流中元素的状态。才能判断是否需要丢弃。所以 skip 属于状态操作。...而 limit 只关心截取的是不是其参数 maxsize (最大区间值),其它毫不关心。一旦达到就立马中断操作返回流。所以 limit 属于一个中断操作。 5....总结 今天对Java Stream API 的 skip() 和limit()方法进行了探讨。不知道你会想到在什么场景下会分别用到它们呢,不妨留言告诉我。

    75331

    Java 8 Stream Api 中的 map和 flatMap 操作

    1.前言 Java 8 提供了非常好用的 Stream API ,可以很方便的操作集合。...今天我们探讨两个 Stream 中间操作 map 和 flatMap 2. map 操作 map 操作是将流中的元素进行再次加工形成一个新流。这在开发中很有用。...比如我们有一个学生集合,我们需要从中提取学生的年龄以分析学生的年龄分布曲线。放在 Java 8 之前 我们要通过新建一个集合然后通过遍历学生集合来消费元素中的年龄属性。...然后再使用 map 操作提取年龄。flatMap 不同于 map 地方在于 map 只是提取属性放入流中,而 flatMap 先提取属性放入一个比较小的流,然后再将所有的流合并为一个流。...扩展一下知识,其实Java 8 中 不光 Stream 中存在这两种操作,其实 Optional 中也存在这两种操作,作用都差不多。

    2.5K20

    RESTful API批量操作的实现

    要解决的问题 RESTful API对于批量操作存在一定的缺陷。例如资源的删除接口: DELETE /api/resourse// 如果我们要删除100条数据怎么搞?...比较容易想到的是下面两种方案: 用逗号分割放进url里:/api/resource/1,2,3......将需要删除的资源的id放到请求体里面 对于方案1,由于浏览器对url的长度存在限制,如果操作的资源过多就无法实现。...所以我参考https://www.npmjs.com/package/restful-api,将批量处理的操作名称和数据全部放到请求体里,统一使用POST请求发送: POST /api/resource...权限判定会出现问题,因为所有请求都是通过POST实现的,默认情况下无法对Model的增、删、改权限进行有效的判断。

    3.9K10

    前端API请求的各种骚操作

    一、前言 API请求的控制一直以来都是前端领域的热点问题,市面上已经有很多优秀的开源项目可供使用。本文本着授人以渔的精神,抛开所有的工具函数,介绍各种场景下如何用最朴素的代码解决实际问题。...二、并发控制 在某些场景中,前端需要在短时间内发送大量的网络请求,同时又不能占用太多的系统资源,这就要求对请求做并发控制了。...,则新建一个 promise,将 resolve 和 reject 存到 listeners 数组中,订阅请求的结果。...,如果无效了就忽略后续的操作。...五、总结 本文列举了前端处理API请求时的几个特殊场景,包括并发控制、节流、取消和淘汰,并根据每个场景的特点总结出了解决方式,在保证数据有效性的同时提升了性能。

    87730

    Apache Curator操作zookeeper的API使用

    API的不足之处: 在连接zk超时的时候,不支持自动重连,需要手动操作 Watch注册一次就会失效,需要反复注册 不支持递归创建节点 Apache curator: Apache 的开源项目 解决Watch...Eclipse等开发工具的工作空间一样,我们该连接中所有的操作都是基于这个命名空间的。...然后我们在该连接的增删查改等操作都会在这个节点中进行。...---- curator之acl权限操作与认证授权 以上我们介绍了curator对节点进行增删查改以及注册watch事件的操作,最后我们来演示一下,使用curator如何对节点的acl权限进行操作以及与...API代码都在之前的zk原生API使用一文中介绍过了,所以这里就不赘述了。

    1.5K30

    Apache Curator操作zookeeper的API使用

    API的不足之处: 在连接zk超时的时候,不支持自动重连,需要手动操作 Watch注册一次就会失效,需要反复注册 不支持递归创建节点 Apache curator: Apache 的开源项目 解决Watch...Eclipse等开发工具的工作空间一样,我们该连接中所有的操作都是基于这个命名空间的。...然后我们在该连接的增删查改等操作都会在这个节点中进行。...---- curator之acl权限操作与认证授权 以上我们介绍了curator对节点进行增删查改以及注册watch事件的操作,最后我们来演示一下,使用curator如何对节点的acl权限进行操作以及与...API代码都在之前的zk原生API使用一文中介绍过了,所以这里就不赘述了。

    1.1K30

    Windows API 中的坑

    GetModuleFileName 风险: 在 DLL 中调用时,若传入的 instance 参数为 NULL,那获取的将是加载 DLL 的进程的 EXE 的路径,若需要获取 DLL 的路径,传入的 instance...建议: 调用 Windows API 时对参数的 in、out、inout 及要求的取值弄清楚。...PS:这个严格来讲不算是坑,是在 Windows API 中存在的一种现象,但是如果不小心也可能出现很难解释和调试的 BUG,记在此以备忘。...ShellExecuteEx 风险: 调用 API 之后,若初始 MASK 设置不正确,SHELLEXECUTEINFO 结构体里的 hProcess 可能为空。...风险 2: 使用 UrlDownloadToFile 下载文件前它会自动先在本地缓存中查找此文件,所以可能最终得到的不是 Server 上的最新内容。

    1.1K10

    使用Java API操作zookeeper的acl权限

    (cdrwa) 注意的是,exists操作和getAcl操作并不受ACL许可控制,因此任何客户端可以查询节点的状态和节点的ACL。...节点的权限(perms)主要有以下几种: Create 允许对子节点Create操作 Read 允许对本节点GetChildren和GetData操作 Write 允许对本节点SetData操作 Delete...允许对子节点Delete操作 Admin 允许对本节点setAcl操作 Znode ACL权限用一个int型的十进制数字perms表示,perms的5个二进制位分别表示setacl、delete、create...在代码上也是如此,我们需要先通过addAuthInfo添加用户信息(账户:明文密码)才能够操作其拥有权限的节点。...修改 ZKNodeAcl 类中的main方法代码如下: ... public class ZKNodeAcl implements Watcher { ...

    1K11
    领券