`
jobar
  • 浏览: 341056 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

集合框架(2)-什么是stream?

 
阅读更多
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 集合方面的面试题

    Java 中集合框架的主要接口是什么? ArrayList 和 LinkedList 有什么区别? HashSet 和 TreeSet 有什么区别? HashMap 和 TreeMap 有什么区别? 什么是迭代器?如何使用它来遍历集合? 什么是 fail-fast 机制? 如何...

    Java的集合框架和StreamAPI

    Java的集合框架和StreamAPI

    JAVA_API1.6文档(中文)

    JavaTM 2 Platform Standard Edition 6 API 规范 本文档是 Java 2 Platform Standard Edition 6.0 的 API 规范。 请参见: 描述 Java 2 Platform 软件包 java.applet 提供创建 applet 所必需的类和 applet ...

    java8stream源码-java8:Java8示例

    为了迭代集合框架,Java SE8 提供了一个名为 forEach 的新方法,该方法定义在 Iterable 接口中。 ForEach() 循环可用于扩展接口 Iterable 的集合类中。 由于此方法输入单个参数,因此也可以将 lambda 表达式作为参数...

    Lambda表达式的相关用法

    Lambda and Collections,学习Java集合框架(Java Collections Framework)新加入的方法 Streams API(I),Stream API基本用法 Streams API(II),Stream规约操作用法,顺道说明接口静态方法和默认方法以及方法引用的...

    spring cloud2有这一篇就够了

    Spring Cloud是⼀系列框架的有序集合。 它利⽤ Spring Boot 的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册、配置中⼼、消息总线、负载均衡、断路器、数据监控等,都可以⽤Spring Boot的开发⻛...

    jdk8-stream-rx-comparison

    它使用GC集合,RxJava和Java 8 Stream API框架比较了“莎士比亚戏剧拼字游戏” kata的实现性能。 这个工作台除了展示所选问题的不同性能外,没有其他目的,请不要将其当作一般工作台使用,也不要得出在其他用例上...

    fluent-traversable:支持通过函数方式对集合和数组进行操作。 受 guava 的 FluentIterable、java8 Stream 框架和 scala 的启发

    这个库的灵感来自 java8 流框架、guava FluentIterable 和 Scala 功能特性。 为了充分享受这个库,欢迎了解基本的功能模式。 总结和主要特点: 允许使用数组和所有实现Traversable接口的东西 基于函数式编程概念...

    Java 8新特性之旅:使用Stream API处理集合

    在这篇“Java 8新特性教程”系列文章中,我们会深入解释,并通过代码来展示,如何通过流来遍历集合,如何从集合和数组来创建流,以及怎么聚合流的值。  在之前的文章“遍历、过滤、处理集合及...  Java的集合框架,

    java8集合源码分析-springboot:学习springboot

    集合源码分析 Springboot的重要性 简化部署、简化配置、简化编码、快速创建 SpringBoot启动流程解析 章节目录 ·一:环境准备 ·Java8、·Maven3.3、·IntelliJIDEA、·Mysql5.7+ Java8新特性 ·Lambda表达式、·...

    比较全面的:Jakarta-commons jar包(附: chm参考手册 & 资源简介)

    它包含三个主要的领域:Utility classes-提供一些静态方法来完成公共任务.Filters-提供文件过滤器的各种实现.Streams-提供实用的Stream,reader与 writer实现 commons-jelly 能够把XML转换成可执行代码,所以Jelly...

    JavaAPI中文chm文档 part2

    由于文件比较大 分为两个部分,这是...org.ietf.jgss 此包提供一个框架,该框架允许应用程序开发人员通过利用统一的 API 使用一些来自各种基础安全机制(如 Kerberos)的安全服务,如验证、数据完整性和和数据机密性。...

    新版java教程 全套javase零基础到高级视频教程小白自学编程下载地址

    ,快速掌握常见数据结构和Collection集合框架体系基础 中级知识点 ,重点讲解Collection:集合框架体系List/Set/Map多种 实现和API ·玩转集合框架迭代器和HashCode和Equals重新排序 实战 ·实战teratori迭代器和自定义...

    java api最新7.0

    org.ietf.jgss 此包提供一个框架,该框架允许应用程序开发人员通过利用统一的 API 使用一些来自各种基础安全机制(如 Kerberos)的安全服务,如验证、数据完整性和和数据机密性。 org.omg.CORBA 提供 OMG CORBA API ...

    JDK_1_6 API

    请参见: 描述 Java 2 Platform 软件包 java.applet 提供创建 applet 所必需的类和 applet 用来与其 applet 上下文通信的类。 java.awt 包含用于创建用户界面和绘制图形图像的所有类。 java.awt.color 提供用于颜色...

    Jakarta commons docs API CHM 格式

    它包含三个主要的领域:Utility classes-提供一些静态方法来完成公共任务.Filters-提供文件过滤器的各种实现.Streams-提供实用的Stream,reader与 writer实现 commons-jelly 能够把XML转换成可执行代码,所以Jelly...

    JavaAPI1.6中文chm文档 part1

    由于比较大分为两个部分,这是第一...org.ietf.jgss 此包提供一个框架,该框架允许应用程序开发人员通过利用统一的 API 使用一些来自各种基础安全机制(如 Kerberos)的安全服务,如验证、数据完整性和和数据机密性。 ...

Global site tag (gtag.js) - Google Analytics