java8——引入流

Stream

Java8中的集合支持一个新的stream方法,它会返回一个流(接口定义在java.util.stream.Stream里)。你在后面会看到,还有很多其他的方式可以得到流,比如利用数值范围或从I/O资源生成流元素。

流的数据处理功能支持类似于数据库的操作,以及函数式编程语言中的常用操作,如filter,map,reduce,find,match,sort等。流操作可以顺序执行,也可以并并行执行。

流操作有两个重要的特点。

  • 流水线——很多流操作本身会返回一个流,这样多个操作就可以链接起来,形成一个大的流水线。
  • 内部迭代——与使用迭代器显示迭代的集合不同,流的迭代操作是在背后进行的。

流与集合

只能遍历一遍

和迭代器类似,流只能遍历一次。遍历完成之后,我们就说这个流已经被消费掉了。你可以从原始数据源哪里再获得一个新的流来重新遍历一遍,就像迭代器一样。例如,以下代码会抛出一个异常,说流已经被消费掉了:

List<String> title = Arrays.asList("java8","In","Action");
Stream<String> s = title.stream();
s.forEach(System.out::println);
s.forEach(System.out::println);//java.lang.IllegalStateException:流已经被操作活关闭。

所以要记得,流只能消费一次。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,810评论 19 139
  • Java8 in action 没有共享的可变数据,将方法和函数即代码传递给其他方法的能力就是我们平常所说的函数式...
    铁牛很铁阅读 5,019评论 1 2
  • 第一章 为什么要关心Java 8 使用Stream库来选择最佳低级执行机制可以避免使用Synchronized(同...
    谢随安阅读 5,362评论 0 4
  • 关于 本文是对 Brian Goetz的State of the Lambda: Libraries Editio...
    aaron688阅读 5,158评论 0 5
  • 从进入“剽悍预备群”到正式入“二班交流群”也有一个星期了,每次看到晨读、话题总想想好了,准备完美了,再动手写。对...
    02bfb4afb442阅读 1,000评论 0 0

友情链接更多精彩内容