Core java for impatient 笔记 ch8 流
流stream 使用了数据视图,让你可以在比集合更高的概念上指定操作
使用流,你只需要将操作的调度留给实现,例如,假设你要计算某个属性的平均值,你只需要
指定数据源和属性,然后流类库会优化计算,比如使用多线程来求和,计数,合并结果
1.迭代器使用了一种明确的遍历策略,同时也阻止了高效的并发执行.
2.你可以从集合,数组,生成器和迭代器创建流
3.使用filter来选择元素,使用map元素转换
4.对于转换刘的其他操作,limit,distinct,sorted
5.从stream中获得结果使用归约操作
6.Optional 类型是作为处理Null值而提供的一个安全替代者
7.Collectors类的groupingBy方法和partitioningBy方法允许你把stream分组来求解
8.并行流自动将流操作并行化
8.1从迭代到stream操作
当你处理集合的时候通常会迭代所有元素并且对每一个元素进行处理,使用流操作可以提高效率并行处理,遵循“做什么”而不限制怎样做,提供了诚信优化提高效率的机会
流表面上看起来和集合相似,然而:
1.流不存储元素,他们存储在底层的集合或者按需求生成
2.流操作不改变他们的源数据
3.如果可能的话,stream操作是延时执行的,也就是说直到需要结果的时候,方法才会执行,如果你要找到前五个长单词,那么stream会在找到第五个之后自动停止执行,所以你可以拥有一个无穷流!
//读取字符串
String contents = new String(Files.readAllBytes(Paths.get("alice.txt")),StandardCharsets.UTF_8);
List<String> words = Arrays.asList(contents.split("\PL+"));
//
long count = words.parallelStream().filter(w -> w.length() > 12).count());
8.2创建stream
集合->利用collection接口的stream方法
数组->利用静态方法Stream.of
可以创建空流
Stream<String> ec = Stream.empty();
可以创建生成器函数
Stream<String> silence = Stream.generate(Math::random);
可以创建序列
Stream<BigInterger> integers = Stream.iterate(BigInterger.ZERO,n -> n.add(BigInteger.ONE));
8.3
filter 检查删除流元素
map 作用于每一个流中的元素
8.4
提取子流和组合流
limit(n) 返回包含n个元素的新流
skip(n) 丢弃前n个元素
简单规约:如何从流数据中获得答案
count方法
max
anyMatch 如果有满足条件返回true
min
Optional 类型是一种更好的表明缺少返回值的方式(和auto 差不多?)
最新文章
- $.prop()和$.attr() 区别用法
- jquery ajax 请求参数详细说明 及 实例
- 20145212 实验三《敏捷开发与XP实践》
- [Linux] LVM的条带化
- Jmeter使用指南
- 【Android代码片段之六】Toast工具类(实现带图片的Toast消息提示)
- [LeetCode] 141&;142 Linked List Cycle I &; II
- 高可用mysql集群搭建
- EXCEL随机密码生成函数
- android zip解压缩
- AI_深度学习为何兴起?
- MT 互联网 面试标准
- MySql存储过程 CURSOR循环
- 源码安装python +NGINX 的坎坷路 +uwsgi安装 部署django 的CRM项目
- 在DOM加载之前insertScript
- VBS计时器
- web在线智能四则运算挑战赛
- suse下修改主机名
- C# sqlhelper 2
- javascript高级语法学习
热门文章
- 电商网站项目Angular+Bootstrap+Node+Express+Mysql
- Microsoft SQL Server学习(二)
- call和apply和bind的区别
- CentOS 6.4 php-fpm 添加service 添加平滑启动/重启
- Android(java)学习笔记198:ContentProvider使用之内容观察者(观察发出去的短信)
- chsh - 改变登录 shell
- Java基础(十一)--Serializable和Externalizable接口实现序列化
- Java基础(十三)--深拷贝和浅拷贝
- 双引号"; ";和单引号&#39; &#39;区别
- java.lang.NoClassDefFoundError: org.springframework.beans.FatalBeanException