高效 告别996,开启java高效编程之门 3-6流操作分类

1    重点

理解流程操作分类

常用的方法

2    Stream流操作分类:

2.1  流操作分类之中间操作(Intermediate):

无状态操作——filter/map/peek等
有状态操作——dictinct/sorted/limit等

2.2  流操作分类之终端操作(Termina1):
非短路操作——forEach/collect/count等
短路操作——anyMatch/findFirst/findAny等

2.3  有状态操作无状态操作区别:

无状态操作:

比如map或者filter会从输入流中获取每一个元素,并且在输出流中得到一个结果,这些操作没有内部状态.

有状态操作:

a  但是像reduce、sum、max这些操作都需要内部状态来累计计算结果;

b  有一些操作sort、distinct、limit、skip看上去和filter、map差不多,他们接收一个流,再生成一个流,但是区别在于排序和去重复项需要知道先前的历史。

比如排序就需要将所有元素放入缓存区后才能给输出流加入一个项目,这个操作对缓存的要求是无上限的,流有多大就需要多大的缓存才能进行运算。这些操作也是有状态操作

2.4  非短路操作短路操作区别:

非短路操作:

每一个数据都要执行,比如循环forEach,循环完意味着每一个元素都遍历过

短路操作:

未必所有数据都能执行到,满足条件后即停止执行。如:findFirst,只要找到第一个要素,就不再往下执行

3    Stream流操作分类具体方法:

原文地址:https://www.cnblogs.com/1446358788-qq/p/12677628.html

时间: 2024-11-07 14:31:16

高效 告别996,开启java高效编程之门 3-6流操作分类的相关文章

黑马程序员——Java基础---IO(二)---IO字节流、流操作规律

------<a href="http://www.itheima.com" target="blank">Java培训.Android培训.iOS培训..Net培训</a>.期待与您交流! -------   字节流 一.概述 1.字节流和字符流的基本操作是相同的,但字节流还可以操作其他媒体文件. 2.由于媒体文件数据中都是以字节存储的,所以,字节流对象可直接对媒体文件的数据写入到文件中,而可以不用再进行刷流动作. 3.读写字节流:Inpu

高效 告别996,开启java高效编程之门 3-2传统方式处理业务逻辑

1 重点 1.1 对sort方法使用的理解 2 代码演练 需求: 根据第一章需求,女盆友提出需求* 1 打印所有商品* 2 图书类的商品一定给买* 3 最贵的买两件* 4 打印最贵的两件商品的名称和总价 测试类: package com.imooc.zhangxiaoxi.stream; import com.alibaba.fastjson.JSON; import com.imooc.zhangxiaoxi.lambda.cart.CartService; import com.imooc.

高效 告别996,开启java高效编程之门 3-7实战:常用中间操作演示之:过滤/映射/扁平化 filter/map/flagMap

1 重点 filter方法的使用 map方法的使用 flatMap方法的使用 forEach方法的使用 2 map和flatMap的区别: map的作用很容易理解就是对rdd之中的元素进行逐一进行函数操作映射为另外一个rdd. flatMap的操作是将函数应用于rdd之中的每一个元素,将返回的迭代器的所有内容构成新的rdd.通常用来切分单词,可用来单词计数 3 实战演示之过滤(filter): package com.imooc.zhangxiaoxi.stream; import com.al

高效 告别996,开启java高效编程之门 2-8实战:判断逻辑参数化-Lambda表达式

0 有用部分 1    函数式编程简介 2    函数式编程和lambda的关系 3    lambda表达式应用范围 4    lambda应用的五个案例 5    函数式编程应用条件 6 提出问题 0 有用部分 4 lambda应用的五个案例 5 函数式编程应用条件 6 提出问题 本节主要介绍了lambda的使用方式,具体demo参照2-10 和2-15 1 函数式编程简介 函数式编程是一种不同的编程思想,定义函数作为公民,可以赋值给变量,作为参数或者返回值来传递 2 函数式编程和lambd

高效 告别996,开启java高效编程之门 2-10实战:自定义函数式接口

1 有用部分 2    代码演练 1 有用部分 个人理解: 1.1 关于lambda的应用 通过 @FunctionalInterface注解 将其参数 fileContent  注入,调用的时候可以直接调取到. 服务层通过直接调用接口的方法,没有用实现类 1.2 关于文件流的读取操作 demo中设计更多的流的读取的操作 2 代码演练 需求: 将本地文件打印出来 接口: package com.imooc.zhangxiaoxi.lambda.file; /** * 接口中只有一个抽象方法,可以

高效 告别996,开启java高效编程之门 2-15方法引用精讲

2-14课程和2-12重复了,所以没有发出来 1 方法引用使用条件 判断方法引用 是否满足场景的要求的时候,只需要看我们的出参和入参是否满足接口的要求即可 2 方法引用场景 四种方法引用类型: 指向静态方法 Class::staticMethod指向现有对象的实例方法 object::instanceMethod指向任意类型的实例方法 C1ass::instanceMethod指向构造方法 Class::new 3 方法引用demo package com.imooc.zhangxiaoxi.l

高效 告别996,开启java高效编程之门 3-5 Stream流概念解析

3-4讲的没有意义,直接过了 1 重点 概念解析中的定义 Stream流的组成 Stream流和集合的区别 2 概念解析 定义: 从支持数据处理操作的源生成的元素序列. 解释: 元素序列:和集合一样,流也是一个接口,可以访问特定元素类型的一组有序值,有序值就是元素序列 源:为流提供数据的源头,比如集合,数组,都可以称之为源. 数据处理操作:流的数据处理操作支持类似与数据库的操作(map,sort,limit)以及函数式编程语言中的一些常用操作. 功能: ◆JDK1.8引入的新成员,以声明式方式处

告别996 实现高效编程 减少开发压力

第1章 口号:打破996魔咒,向“资本家”开炮[我们的最高宗旨]有一种优秀,叫“告别996".本章开宗明义:一语道破课程的最高宗旨:告别996,打破996魔咒,不屈服于“资本家”淫威,为广大猿类提升工作效率,赢得个人时间,同时通过课程思维导图综述本课程内容丰富,必将让小伙伴们乘兴而来,兴尽而归.... 第2章 告别996之函数编程[让代码像撸串儿一样]你是否见过“撸”代码也可以像撸串儿一样?那么我们从函数式编程说起,通过学习本单元,使小伙伴们了解Lambda出现的意义和价值:会灵活使用:知晓使用

[Java并发编程实战]构建一个高效可复用缓存程序(含代码)

[Java并发编程实战]构建一个高效可复用缓存程序(含代码) 原文地址:https://www.cnblogs.com/chengpeng15/p/9915800.html