首页 > 编程语言 >读Java8函数式编程笔记02_流

读Java8函数式编程笔记02_流

时间:2023-01-27 08:11:17浏览次数:50  
标签:02 4.6 函数 Stream 编程 接口 6.3 求值 Java8

1. 外部迭代

1.1. for循环是一个封装了迭代的语法糖

1.1.1. 本质上来讲是一种串行化操作

1.2. 很难抽象出不同操作

2. 内部迭代

2.1. 内部迭代中的相应接口:Stream

2.2. 和Iterator类似,Stream是一种内部迭代方式

2.3. 内部迭代将更多控制权交给了集合类

3. Stream

3.1. 理想方式

3.1.1. 形成一个惰性求值的链,最后用一个及早求值的操作返回想要的结果

3.2. Stream工厂是更好的选择

3.2.1. 仅暴露一个Stream接口,都不会影响内部的List或Set

3.3. 用函数式编程方式在集合类上进行复杂操作的工具

3.4. 惰性求值方法

3.4.1. 最终不产生新集合的方法

3.5. 及早求值方法

3.5.1. 最终会从Stream产生值的方法

3.6. 判断标准

3.6.1. 返回值是Stream

3.6.2. 返回值是另一个值或为空

4. 常用的流操作

4.1. of方法

4.1.1. 使用一组初始值生成新的Stream

4.2. collect(toList())方法

4.2.1. 由Stream里的值生成一个列表

4.2.2. 一个及早求值操作

4.3. map

4.3.1. 将一个流中的值转换成一个新的流

4.3.2. 一个函数可以将一种类型的值转换成另外一种类型

4.3.3. 参数和返回值不必属于同一种类型

4.3.4. 必须是Function接口的一个实例

4.3.4.1. Function接口是只包含一个参数的普通函数接口

4.4. flatMap

4.4.1. 可用Stream替换值,然后将多个Stream连接成一个Stream

4.4.2. 调用stream方法,将每个列表转换成Stream对象,其余部分由flatMap方法处理

4.4.3. Function接口

4.4.3.1. 方法的返回值限定为Stream类型

4.5. filter

4.5.1. 遍历数据并检查其中的元素

4.5.2. 值为true的元素被保留下来

4.5.3. Predicate接口

4.6. reduce

4.6.1. 实现从一组值中生成一个值

4.6.2. count方法

4.6.3. max和min

4.6.3.1. 返回Optional对象

4.6.3.1.1. 代表一个可能存在也可能不存在的值

4.6.3.2. Comparator对象

4.6.3.2.1. 静态方法comparing
4.6.3.2.2. 有且只有一个抽象方法
4.6.3.2.3. 实际上是一个函数接口

5. 多次调用流操作缺点

5.1. 代码可读性差,样板代码太多,隐藏了真正的业务逻辑

5.2. 效率差,每一步都要对流及早求值,生成新的集合

5.3. 代码充斥一堆垃圾变量,它们只用来保存中间结果

5.4. 难于自动并行化处理

6. 高阶函数

6.1. 接受另外一个函数作为参数,或返回一个函数的函数

6.2. 函数的参数列表里包含函数接口,或该函数返回一个函数接口

6.3. 没有副作用的函数不会改变程序或外界的状态

6.3.1. 给变量赋值是一种副作用

6.3.2. 向控制台输出了信息是一种副作用

6.3.3. 获取值使用户更容易写出没有副作用的代码

6.3.4. Lambda表达式传给Stream上的高阶函数,都应该尽量避免副作用

6.3.5. 唯一的例外是forEach方法,它是一个终结方法

标签:02,4.6,函数,Stream,编程,接口,6.3,求值,Java8
From: https://www.cnblogs.com/lying7/p/17068516.html

相关文章

  • Luogu P8710 [蓝桥杯 2020 省 AB1] 网络分析
    https://www.luogu.com.cn/problem/P7191发现一个性质:最多只会合并\(n-1\)次(类似树只有\(n-1\)条边)。于是在合并的时候暴力统计即可。时间复杂度\(O(n^2+m)\)。......
  • 2023_1_27 论zzy爱好的本质
    我只是喜欢竞争,justlikethatsimple,只要是我觉得有意义的事,我都愿意努力提高自己水平,比如我喜欢玩csgo,apex,但对squad没有一点兴趣,因为没有东西能证明我的水平,像是段位......
  • 【组会】2023_1_27 google soli
    Soli:UbiquitousGestureSensingwithMillimeterWaveRadar(59)soli是一项运用微型雷达监测空中手势动作的传感技术,这种特殊设计的雷达传感器可以追踪亚毫米精准......
  • x210-2023-01-26
    1、由于kernel和system的镜像名字起的比较类似,没注意区分的情况下互相放到对方的烧录命令里头了,但是fastboot命令执行过程中不报错,下载也能下载进去并提示成功,但直到重启机......
  • 力扣每一一题2023.1.26---1663. 具有给定数值的最小字符串
    小写字符的数值是它在字母表中的位置(从1开始),因此a的数值为1,b的数值为2,c的数值为3,以此类推。字符串由若干小写字符组成,字符串的数值为各字符的数值之和。例......
  • 2019-2020各省省选选解
    没写题解不意味着没做,有的忘了写或者太草率了就算了。部分前言删了。2020联合省选希望题解链接。ZJOI抽卡题解有趣的题目。后面的部分不翻某混凝土数学真做不来......
  • 2022冬 密码学趣题——1
    HITCTFweird_relationshipfromsecretimportflag#rsakeygenerationphase:)ahintforyou#q=1#whilenotis_prime(q):#p=random_prime(2**512)......
  • 【TPAMI2023】Global Learnable Attention for Single Image Super-Resolution
    【TPAMI2023】GlobalLearnableAttentionforSingleImageSuper-Resolution代码:https://github.com/laoyangui/DLSN这是来自福州大学的工作,提出一个有意思的观点:当前......
  • My technical summary in 2022
    IntroIt'squitetoughformein2022.Iwentthroughchangingjob,injuryandcovidepidemic.AboutTechnology,IlearnedcudaandGPUprogrammingatthebeg......
  • 2022NOIP A层联测35
    好久之前的题了。A.弹珠游戏\(R,G,B\)任意时刻只能出现两种,出现第三种时优先匹配剩下两种的组合,再考虑形成新的组合,匹配啥是一样的,于是每次乘上方案数code#includ......