《Java核心技术 卷Ⅱ 高级特性(原书第10版)》一1.4 抽取子流和连接流

1.4 抽取子流和连接流

调用stream.limit(n)会返回一个新的流,它在n个元素之后结束(如果原来的流更短,那么就会在流结束时结束)。这个方法对于裁剪无限流的尺寸会显得特别有用。例如,

会产生一个包含100个随机数的流。
调用stream.skip(n)正好相反:它会丢弃前n个元素。这个方法在将文本分隔为单词时会显得很方便,因为按照split方法的工作方式,第一个元素是没什么用的空字符串。我们可以通过调用skip来跳过它:

我们可以用Stream类的静态的concat方法将两个流连接起来:

当然,第一个流不应该是无限的,否则第二个流永远都不会得到处理的机会。
java.util.stream.Stream 8

  • Stream limit(long maxSize)
    产生一个流,其中包含了当前流中最初的maxSize个元素。
  • Stream skip(long n)
    产生一个流,它的元素是当前流中除了前n个元素之外的所有元素。
  • static Stream concat(Stream<? extends T> a, Stream<? extends T> b)
    产生一个流,它的元素是a的元素后面跟着b的元素。
时间: 2024-09-19 09:57:48

《Java核心技术 卷Ⅱ 高级特性(原书第10版)》一1.4 抽取子流和连接流的相关文章

《Java核心技术 卷Ⅱ 高级特性(原书第10版)》一1.13 基本类型流

1.13 基本类型流 到目前为止,我们都是将整数收集到Stream中,尽管很明显,将每个整数都包装到包装器对象中是很低效的.对其他基本类型来说,情况也是一样,这些基本类型是:double.f?loat.long.short.char.byte和boolean.流库中具有专门的类型IntStream.LongStream和DoubleStream,用来直接存储基本类型值,而无需使用包装器.如果想要存储short.char.byte和boolean,可以使用IntStream,而对于f?loat,可

《Java核心技术 卷Ⅱ 高级特性(原书第10版)》一1.5 其他的流转换

1.5 其他的流转换 distinct方法会返回一个流,它的元素是从原有流中产生的,即原来的元素按照同样的顺序剔除重复元素后产生的.这个流显然能够记住它已经看到过的元素. 对于流的排序,有多种sorted方法的变体可用.其中一种用于操作Comparable元素的流,而另一种可以接受一个Comparator.下面,我们对字符串排序,使得最长的字符串排在最前面: 与所有的流转换一样,sorted方法会产生一个新的流,它的元素是原有流中按照顺序排列的元素. 当然,我们在对集合排序时可以不使用流.但是,

《Java核心技术 卷Ⅱ 高级特性(原书第10版)》一导读

前 言 致读者 本书是按照Java SE 8完全更新后的<Java核心技术 卷Ⅱ 高级特性(原书第10版)>.卷Ⅰ主要介绍了Java语言的一些关键特性:而本卷主要介绍编程人员进行专业软件开发时需要了解的高级主题.因此,与本书卷Ⅰ和之前的版本一样,我们仍将本书定位于用Java技术进行实际项目开发的编程人员. 编写任何一本书籍都难免会有一些错误或不准确的地方.我们非常乐意听到读者的意见.当然,我们更希望对本书问题的报告只听到一次.为此,我们创建了一个FAQ.bug修正以及应急方案的网站http:/

Java核心技术 卷Ⅰ 基础知识(原书第10版)

Java核心技术系列 Java核心技术 卷Ⅰ 基础知识 (原书第10版) Core Java Volume I-Fundamentals (10th Edition) [美] 凯S.霍斯特曼(Cay S. Horstmann) 著 周立新 陈 波 叶乃文 邝劲筠 杜永萍 译 图书在版编目(CIP)数据 Java核心技术 卷Ⅰ 基础知识(原书第10版) / (美)凯S. 霍斯特曼(Cay S. Horstmann)著:周立新等译. -北京:机械工业出版社,2016.8 (Java核心技术系列) 书

《Java核心技术 卷Ⅱ 高级特性(原书第10版)》一1.14 并行流

1.14 并行流 流使得并行处理块操作变得很容易.这个过程几乎是自动的,但是需要遵守一些规则.首先,必须有一个并行流.可以用Collection.parallelStream()方法从任何集合中获取一个并行流: 只要在终结方法执行时,流处于并行模式,那么所有的中间流操作都将被并行化. 当流操作并行运行时,其目标是要让其返回结果与顺序执行时返回的结果相同.重要的是,这些操作可以以任意顺序执行. 下面的示例是一项你无法完成的任务.假设你想要对字符串流中的所有短单词计数: 这是一种非常非常糟糕的代码.

《Java核心技术 卷Ⅱ 高级特性(原书第10版)》一第3章 XML

第3章 XML ▲ XML概述 ▲ 使用命名空间 ▲ 解析XML文档 ▲ 流机制解析器 ▲ 验证XML文档 ▲ 生成XML文档 ▲ 使用XPath来定位信息 ▲ XSL转换 Don Box等人在其合著的<Essential XML>(Addison-Wesley出版社2000年出版)的前言中半开玩笑地说道:"可扩展标记语言(Extensible Markup Language,XML)已经取代了Java.设计模式.对象技术,成为软件行业解决世界饥荒的方案."确实,正如你将在

《Java核心技术 卷Ⅱ 高级特性(原书第10版)》一1.1 从迭代到流的操作

1.1 从迭代到流的操作 在处理集合时,我们通常会迭代遍历它的元素,并在每个元素上执行某项操作.例如,假设我们想要对某本书中的所有长单词进行计数.首先,将所有单词放到一个列表中: 现在,我们可以迭代它了: 在使用流时,相同的操作看起来像下面这样: 流的版本比循环版本要更易于阅读,因为我们不必扫描整个代码去查找过滤和计数操作,方法名就可以直接告诉我们其代码意欲何为.而且,循环需要非常详细地指定操作的顺序,而流却能够以其想要的任何方式来调度这些操作,只要结果是正确的即可. 仅将stream修改为pa

《Java核心技术 卷Ⅱ 高级特性(原书第10版)》一1.7.4 用f?latMap来构建Optional值的函数

1.7.4 用f?latMap来构建Optional值的函数 假设你有一个可以产生Optional对象的方法f,并且目标类型T具有一个可以产生Optional对象的方法g.如果它们都是普通的方法,那么你可以通过调用s.f().g()来将它们组合起来.但是这种组合没法工作,因为s.f()的类型为Optional,而不是T.因此,需要调用: 如果s.f()的值存在,那么g就可以应用到它上面.否则,就会返回一个空Optional. 很明显,如果有更多的可以产生Optional值的方法或Lambda表达

《Java语言导学(原书第6版)》一导读

前 言 自2010年年初Oracle公司收购Sun公司以来,Java语言迎来激动人心的时代.正如Java Community Process计划的活动所印证的,Java语言将不断发展.本书基于Java SE 8(Java Platform Standard Edition 8)并引用其API. 相比本书第5版(针对的是Java版本7),第6版有一些新特点: Lambda表达式使得功能可作为方法参数使用,代码作为数据使用.Lambda表达式描述单个方法接口(也称为功能接口)的实例会更简洁.4.4.