stream是一系列的值。包java.util.stream defines定义了引用值(Stream)的stream类型和一些原语stream类(IntStream,LongStream和DoubleStream)。streams类就像迭代器,它们按处理需求产生元素,但不与任何特定的存储机制关联。stream有时候局部计算-它们中某些元素仍会生成,有时候它的元素会全部参与计算,此时会结束stream。stream可以将数组、集合、生成函数或者一个IO通道作为它的数据源;它也可以是另一个stream的操作结果(见下文)。一种可部分计算流可以有无穷多个元素生成,例如来源于生成函数。
stream类型定义中间的操作(从而产生新的数据流),例如map,和最终操作(导致非流值),如forEach。对中间操作的调用通常以一种流式风格的API链接在一起,形成了一个管道(如前所述)。最终操作,正如它的名字所暗示的,终止方法链。最终操作又被称为“及早操作”,因为调用会导致立即从管道中消费值,而中间操作也叫“懒操作”,只会按需产生值。例如,假设strings被声明为List<String>,代码:
IntStream ints = strings.stream().mapToInt(s -> s.length()).filter(i -> i%2 != 0);
启动一个管道,首先生成一个相应于字符串值长度int值的stream,然后仅在奇数时通过。但是对于声明为ints的结果来说什么也没发生。当有像这样的语句时才发生处理
ints.forEach(System.out::println);
使用一个及早最终操作来将管道中的值取出。
下表显示了流操作的一个小示例。为简单起见选择了这些例子,出于同样的原因,方法签名中的有界泛型类被替换成了其界类型。
streams可以是有序或者无序的。stream的来源是数组、链表或者生成函数是有序的,来源是集合是无序的。顺序是由最中间操作保存;异常进行排序,其中规定了先前存在是有序的还是无序,从而消除了存在于接收器的任何顺序。在有些情况下会提供这种操作:最终操作的顺序不明显但开发者想更高效的利用这些操作,其在某些无序的stream上并行操作比串行操作更高效。大多数最终操作遵循顺序;例如toArray,被称为一个有序流,按元素顺序创建一个数组。forEach是个例外;其流中元素处理的顺序是不定的。
原文链接:http://www.lambdafaq.org/what-is-a-stream/
- 大小: 105.2 KB
分享到:
相关推荐
Java 中集合框架的主要接口是什么? ArrayList 和 LinkedList 有什么区别? HashSet 和 TreeSet 有什么区别? HashMap 和 TreeMap 有什么区别? 什么是迭代器?如何使用它来遍历集合? 什么是 fail-fast 机制? 如何...
Java的集合框架和StreamAPI
JavaTM 2 Platform Standard Edition 6 API 规范 本文档是 Java 2 Platform Standard Edition 6.0 的 API 规范。 请参见: 描述 Java 2 Platform 软件包 java.applet 提供创建 applet 所必需的类和 applet ...
为了迭代集合框架,Java SE8 提供了一个名为 forEach 的新方法,该方法定义在 Iterable 接口中。 ForEach() 循环可用于扩展接口 Iterable 的集合类中。 由于此方法输入单个参数,因此也可以将 lambda 表达式作为参数...
Lambda and Collections,学习Java集合框架(Java Collections Framework)新加入的方法 Streams API(I),Stream API基本用法 Streams API(II),Stream规约操作用法,顺道说明接口静态方法和默认方法以及方法引用的...
Spring Cloud是⼀系列框架的有序集合。 它利⽤ Spring Boot 的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册、配置中⼼、消息总线、负载均衡、断路器、数据监控等,都可以⽤Spring Boot的开发⻛...
它使用GC集合,RxJava和Java 8 Stream API框架比较了“莎士比亚戏剧拼字游戏” kata的实现性能。 这个工作台除了展示所选问题的不同性能外,没有其他目的,请不要将其当作一般工作台使用,也不要得出在其他用例上...
这个库的灵感来自 java8 流框架、guava FluentIterable 和 Scala 功能特性。 为了充分享受这个库,欢迎了解基本的功能模式。 总结和主要特点: 允许使用数组和所有实现Traversable接口的东西 基于函数式编程概念...
在这篇“Java 8新特性教程”系列文章中,我们会深入解释,并通过代码来展示,如何通过流来遍历集合,如何从集合和数组来创建流,以及怎么聚合流的值。 在之前的文章“遍历、过滤、处理集合及... Java的集合框架,
集合源码分析 Springboot的重要性 简化部署、简化配置、简化编码、快速创建 SpringBoot启动流程解析 章节目录 ·一:环境准备 ·Java8、·Maven3.3、·IntelliJIDEA、·Mysql5.7+ Java8新特性 ·Lambda表达式、·...
它包含三个主要的领域:Utility classes-提供一些静态方法来完成公共任务.Filters-提供文件过滤器的各种实现.Streams-提供实用的Stream,reader与 writer实现 commons-jelly 能够把XML转换成可执行代码,所以Jelly...
由于文件比较大 分为两个部分,这是...org.ietf.jgss 此包提供一个框架,该框架允许应用程序开发人员通过利用统一的 API 使用一些来自各种基础安全机制(如 Kerberos)的安全服务,如验证、数据完整性和和数据机密性。...
,快速掌握常见数据结构和Collection集合框架体系基础 中级知识点 ,重点讲解Collection:集合框架体系List/Set/Map多种 实现和API ·玩转集合框架迭代器和HashCode和Equals重新排序 实战 ·实战teratori迭代器和自定义...
org.ietf.jgss 此包提供一个框架,该框架允许应用程序开发人员通过利用统一的 API 使用一些来自各种基础安全机制(如 Kerberos)的安全服务,如验证、数据完整性和和数据机密性。 org.omg.CORBA 提供 OMG CORBA API ...
请参见: 描述 Java 2 Platform 软件包 java.applet 提供创建 applet 所必需的类和 applet 用来与其 applet 上下文通信的类。 java.awt 包含用于创建用户界面和绘制图形图像的所有类。 java.awt.color 提供用于颜色...
它包含三个主要的领域:Utility classes-提供一些静态方法来完成公共任务.Filters-提供文件过滤器的各种实现.Streams-提供实用的Stream,reader与 writer实现 commons-jelly 能够把XML转换成可执行代码,所以Jelly...
由于比较大分为两个部分,这是第一...org.ietf.jgss 此包提供一个框架,该框架允许应用程序开发人员通过利用统一的 API 使用一些来自各种基础安全机制(如 Kerberos)的安全服务,如验证、数据完整性和和数据机密性。 ...