博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
《Java核心技术 卷Ⅱ 高级特性(原书第10版)》一1.2 流的创建
阅读量:6100 次
发布时间:2019-06-20

本文共 1433 字,大约阅读时间需要 4 分钟。

1.2 流的创建

你已经看到了可以用Collection接口的stream方法将任何集合转换为一个流。如果你有一个数组,那么可以使用静态的Stream.of方法。

image

of方法具有可变长参数,因此我们可以构建具有任意数量引元的流:

image

使用Array.stream(array, from, to)可以从数组中位于from(包括)和to(不包括)的元素中创建一个流。

为了创建不包含任何元素的流,可以使用静态的Stream.empty方法:
image

Stream接口有两个用于创建无限流的静态方法。generate方法会接受一个不包含任何引元的函数(或者从技术上讲,是一个Supplier接口的对象)。无论何时,只要需要一个流类型的值,该函数就会被调用以产生一个这样的值。我们可以像下面这样获得一个常量值的流:

image

或者像下面这样获取一个随机数的流:

image

为了产生无限序列,例如0 1 2 3 …,可以使用iterate方法。它会接受一个“种子”值,以及一个函数(从技术上讲,是一个UnaryOperation),并且会反复地将该函数应用到之前的结果上。例如,

image

该序列中的第一个元素是种子BigInteger.ZERO,第二个元素是f(seed),即1(作为大整数),下一个元素是f(f(seed)),即2,后续以此类推。

注意:Java API中有大量方法都可以产生流。例如,Pattern类有一个splitAsStream方法,它会按照某个正则表达式来分割一个CharSequence对象。可以使用下面的语句来将一个字符串分割为一个个的单词:静态的Files.lines方法会返回一个包含了文件中所有行的Stream:

image

程序清单1-2中的示例程序展示了创建流的各种方式。

程序清单1-2 streams/CreatingStreams.java
image
image
image

java.util.stream.Stream 8

  • static Stream of(T... values)
    产生一个元素为给定值的流。
  • static Stream empty()
    产生一个不包含任何元素的流。
  • static Stream generate(Supplier s)
    产生一个无限流,它的值是通过反复调用函数s而构建的。
  • static Stream iterate(T seed, UnaryOperator f)
    产生一个无限流,它的元素包含种子、在种子上调用f产生的值、在前一个元素上调用f产生的值,等等。

java.util.Arrays 1.2

  • static Stream stream(T[] array, int startInclusive, int endExclusive) 8
    产生一个流,它的元素是由数组中指定范围内的元素构成的。

java.util.regex.Pattern 1.4

  • Stream splitAsStream(CharSequence input) 8
    产生一个流,它的元素是输入中由该模式界定的部分。

java.nio.f?ile.Files 7

  • static Stream lines(Path path) 8
  • static Stream lines(Path path, Charset cs) 8

产生一个流,它的元素是指定文件中的行,该文件的字符集为UTF-8,或者为指定的字符集。

java.util.function.Supplier 8

  • T get()
    提供一个值。

转载地址:http://ntsza.baihongyu.com/

你可能感兴趣的文章
Matlab的2D作图
查看>>
百度联盟广告如何理解按父容器宽度
查看>>
适配器模式
查看>>
那些闪亮的日子
查看>>
SQLServer存储引擎——05.索引的结构和分类
查看>>
「BZOJ4510」「Usaco2016 Jan」Radio Contact 解题报告
查看>>
python 基础复习 04
查看>>
Codeforces 435 B Mahmoud and Ehab and the bipartiteness 二分图的最大匹配问题
查看>>
Log4Net记录到文件
查看>>
javascript 创建 div
查看>>
华为实施转型 面临开放式变局
查看>>
如何更改Ubuntu下ls 显示的每种文件的颜色 与 备份vim
查看>>
BZOJ1770:[USACO]lights 燈(高斯消元,DFS)
查看>>
SVN强制添加日志出现E205000错误解决方法
查看>>
xavier,kaiming初始化中的fan_in,fan_out在卷积神经网络是什么意思
查看>>
程序员必须知道的十大基础算法(一)快速排序
查看>>
如何上传本地文件到github又如何删除自己的github仓库
查看>>
Winform嵌入其它应用程序
查看>>
JavaScript概念之screen/client/offset/scroll/inner/avail的width/left ...
查看>>
题外话 -- windows10系统C盘空间变大 CPU莫名跑满
查看>>