Stream API:从迭代器到Stream操作
来源:互联网 发布:java如何解决并发问题 编辑:程序博客网 时间:2024/04/30 01:53
在迭代器中,我们经常会对元素进行处理,如下代码,读取文件stream.txt中的内容,然后截取成单词数组,然后遍历,记录单词长度大于8的个数
@Test public void test01() throws IOException { String contents = new String(Files.readAllBytes(Paths.get("stream.txt")), StandardCharsets.UTF_8); List<String> words = Arrays.asList(contents.split("[\\P{L}]+")); int count = 0; for (String word : words){ if (word.length() > 8){ count ++; } }}
在Java8中,可以用Stream来代替,如下代码:
long countStream = words.stream().filter(w -> w.length() > 8).count();实现的效果是一样的,不过,我自己测试的,用Stream处理所用的时间比迭代器多不少,以下是测试一个4MB的文件,结果如图:
用Stream的好处是:可以应用在并行运算中
Stream跟集合的区别:
1.Stream自己不会存储元素。元素可能被存储在底层的集合中,或者根据需要产生出来。
2.Stream操作符不会改变源对象。相反,它们会返回一个持有结果的新Stream。
3.Stream操作符可能是延迟执行的。这以为着它们会等到需要结果的时候才执行。
如果需要让Stream API并行执行过滤和统计操作,则只需要将stream()改为parallelStream(),如下代码
long countStream = words.parallelStream().filter(w -> w.length() > 8).count();
Stream通过3个阶段来建立一个操作流水线:
1.创建一个Stream。
2.在一个或多个步骤中,指定将初始Stream转换为另一个Stream的中间操作。
3.使用一个终止操作来产生一个结果。该操作会强制它之前的延迟操作立即执行。在这之后,该Stream就不会再被使用了。
在示例中,通过stream或者parallelStream方法来创建Stream,再通过filter方法对其进行转换,而count就是终止操作。
0 0
- Stream API:从迭代器到Stream操作
- Stream API---终止操作
- Stream API:创建Stream
- Stream API---2.中间操作
- Stream API
- Stream API
- Stream API
- Stream API
- Stream API
- Stream API
- Stream API
- Stream
- stream
- stream
- Stream
- stream
- stream
- Stream
- 常用的JavaScript验证正则表达式
- 正则表达式30分钟入门教程
- 学习安排-基础知识回顾
- Connection. rollback方法—事务回滚
- IntelliJ IDEA的jsp中request等对象无法被解析的解决办法
- Stream API:从迭代器到Stream操作
- VC++ 调用 C#生成DLL的两种方法
- Android之TabHost
- Java——常见的HTTP状态码:
- 编译Android系统源码和内核源码
- 在windows平台下安装MangoDB3.0.7 设置超级管理员服务启动
- html css 十一条网页设计经典实用的代码片段
- tableview cellForRowAtIndexPath reloadData不调用问题
- Android中View的触摸事件涉及到哪些方法?他们之间有什么关系?