内部迭代和外部迭代本质刨析:(操作流就像英语中的完形填空 , 直接操作集合就是完成一个完整的命题作文)
内部迭代
用流 , 是并行化 , 以下代码可能你觉得有多个循环 , 但是流的底层实际上只用了一个循环 , 可以这样想 , 流实际上是一个容器 , 里面有一个集合 , 这个集合存放的是对流的各种操作 , 流会尽最大可能去优化;以下代码也不是按照顺序一个一个执行的 , 是由集合框架自己决定的
文章插图
外部迭代
用集合 , 是串行化 , 下图是我的代码 , 可以帮助大家理解
文章插图
集合关注的是数据与数据存储本身;
流关注的是对数据的计算;
流与迭代器类似的一点是:流是无法重复使用或消费的
如何判断是中间操作还是终止操作呢
中间操作都会返回一个Stream对象 , 比如Stream , Stream , Stream
终止操作则不会返回Steam类型 , 可能不返回值 , 也可能返回其他类型的单个值
Stream流里面的方法:
int sum = Stream.iterate(1, item -> item + 2).limit(6).filter(item -> item > 2).mapToInt(item -> item * 2) .skip(2).limit(2).sum();
skip():忽略掉前几个元素limit():获取前几个元素
sum():求和(map映射是没有求和方法的)
Stream分组与分区(partition ):
分组:group by
分区:partition by (布尔值)
分区是分组的一种特殊情况
流的特性:
流一旦被操作或使用了 , 就不能再去重复的使用这个流 , 或者说流一旦被关闭了 , 也是不能再去重复使用了
五、Optional类中文意思:可选
Optional类的使用其实在其他语言里很早就使用了(比如Swift、Groovy、Scala) , Java是最晚使用的 ,
它的出现主要解决的问题:NPE(NullPointerException)
if (null != person){ Address address = person.getName(); if (null != address){ } }
六、高阶函数高阶函数:如果一个函数接受一个函数作为参数 , 或者返回一个函数作为一个返回值 , 那么该函数就叫做高阶函数 。
默认方法
接口当中可以声明方法的实现了 , 但是这个方法的实现必须要带上default关键字
从java8开始 , 为啥要增加默认方法?
Collector收集器(很重要)
R collect(Collector<? super T, A, R> collector);
- collect:收集器
- Collector作为collect方法的参数
- Collector是一个接口 , 它是一个可变的汇聚操作 , 将输入元素累积到一个可变的结果容器中(ArrayList就是一个可变的容器) , 它会在所有元素处理完毕之后 , 将累积的结果转换成一个最终的表示(这是一个可选操作) , 它支持串行(一个线程执行)和并行(多个线程执行)两种方式执行 。
- Collectors本身提供了关于Collector的常见汇聚实现 , Collectors本身实际是一个工厂(Collectors提供了很多可变汇聚操作的实现)
Collector同一性和结合性分析
combiner函数:
Iterator迭代器
总结? 以上是我关于jdk1.8新特性的一些总结 , 欢迎大家相互交流 。
推荐阅读
- MySQL的自增ID用完了,插入数据会出现什么问题?
- 32GB内存有必要吗?实测给出你想不到的答案
- 解读TF、PaddlePaddle、天元等AI框架,你想知道的都在这里了
- 智能搜索模型预估框架的建设与实践
- 谈谈 Redis 的过期策略
- 梦见一些妖魔鬼怪的梦是什么征兆 梦到妖魔鬼怪是什么意思?
- 梦见青色的虫子是什么 梦到很多青虫预示着什么
- 从报文交互看Telnet协议的安全系数
- 蜂蜜柠檬美人茶的做法,柠檬橙子茶的做法
- 福建茉莉花茶,茉莉花茶的选购观其形