《Java核心技术 卷Ⅱ 高级特性(原书第10版)》一1.8 收集结果

简介: 本节书摘来华章计算机《Java核心技术 卷Ⅱ 高级特性(原书第10版)》一书中的第1章 ,第1.8节,[美] 凯S.霍斯特曼(Cay S. Horstmann) 著陈昊鹏 译 更多章节内容可以访问云栖社区“华章计算机”公众号查看。

1.8 收集结果

当处理完流之后,通常会想要查看其元素。此时可以调用iterator方法,它会产生可以用来访问元素的旧式风格的迭代器。
或者,可以调用forEach方法,将某个函数应用于每个元素:
image

在并行流上,forEach方法会以任意顺序遍历各个元素。如果想要按照流中的顺序来处理它们,可以调用forEachOrdered方法。当然,这个方法会丧失并行处理的部分甚至全部
优势。
但是,更常见的情况是,我们想要将结果收集到数据结构中。此时,可以调用toArray,获得由流的元素构成的数组。
因为无法在运行时创建泛型数组,所以表达式stream.toArray()会返回一个Object[]数组。如果想要让数组具有正确的类型,可以将其传递到数组构造器中:
image

针对将流中的元素收集到另一个目标中,有一个便捷方法collect可用,它会接受一个Collector接口的实例。Collectors类提供了大量用于生成公共收集器的工厂方法。为了将流收集到列表或集中,可以直接调用
image

java.util.stream.BaseStream 8

  • Iterator iterator()
    产生一个用于获取当前流中各个元素的迭代器。这是一种终结操作。

程序清单1-4中的示例程序展示了如何从流中收集元素。
程序清单1-4 collecting/CollectingResults.java
image
image
image
image

java.util.stream.Stream 8

java.util.stream.Collectors 8

  • static Collector> toList()
  • static Collector> toSet()
    产生一个将元素收集到列表或集中的收集器。

static > Collector toCollection (Supplier collectionFactory)
产生一个将元素收集到任意集合中的收集器。可以传递一个诸如TreeSet::new的构造器引用。

  • static Collector joining()
  • static Collector joining(CharSequence delimiter)
  • static Collector joining(CharSequence delimiter, CharSequence prefix, CharSequence suffix)
    产生一个连接字符串的收集器。分隔符会置于字符串之间,而第一个字符串之前可以有前缀,最后一个字符串之后可以有后缀。如果没有指定,那么它们都为空。
  • static Collector summarizingInt(ToIntFunction<? super T> mapper)
  • static Collector summarizingLong (ToLongFunction<? superT> mapper)
  • static Collector summarizingDouble (ToDoubleFunction<? super T> mapper)
    产生能够生成(Int|Long|Double)SummaryStatistics对象的收集器,通过它可以获得将mapper应用于每个元素后所产生的结果的个数、总和、平均值、最大值和最小值。

IntSummaryStatistics 8

  • LongSummaryStatistics 8
    DoubleSummaryStatistics 8

long getCount()
产生汇总后的元素的个数。?

  • (int|long|double) getSum()
  • double getAverage()
    产生汇总后的元素的总和或平均值,或者在没有任何元素时返回0。
  • (int|long|double) getMax()
  • (int|long|double) getMin()
    产生汇总后的元素的最大值和最小值,或者在没有任何元素时,产生(Integer| Long|Double).(MAX|MIN)_VALUE。
相关文章
|
1月前
|
开发框架 Java API
最新Java基础系列课程--Day13-高级特性(二)
最新Java基础系列课程--Day13-高级特性
|
1月前
|
Java 程序员 API
最新Java基础系列课程--Day13-高级特性(三)
最新Java基础系列课程--Day13-高级特性
|
1月前
|
开发框架 Java 程序员
最新Java基础系列课程--Day13-高级特性(一)
最新Java基础系列课程--Day13-高级特性
|
2月前
|
开发框架 Java 程序员
最新Java基础系列课程--Day13-高级特性
最新Java基础系列课程--Day13-高级特性
|
2月前
|
存储 Java 编译器
《Java 核心技术卷1 基础知识》第三章 Java 的基本程序设计结构 笔记(下)
《Java 核心技术卷1 基础知识》第三章 Java 的基本程序设计结构 笔记
78 0
|
2月前
|
存储 自然语言处理 Java
《Java 核心技术卷1 基础知识》第三章 Java 的基本程序设计结构 笔记(上)
《Java 核心技术卷1 基础知识》第三章 Java 的基本程序设计结构 笔记
76 0
|
2月前
|
Oracle Java 关系型数据库
《Java 核心技术卷1 基础知识》第二章 Java 程序设计环境 笔记
《Java 核心技术卷1 基础知识》第二章 Java 程序设计环境 笔记
29 1
|
2月前
|
存储 Java 编译器
《Java 核心技术卷1 基础知识》第一章 Java程序设计概述 笔记
《Java 核心技术卷1 基础知识》第一章 Java程序设计概述 笔记
40 0
|
2月前
|
Java API 容器
资深Java大牛带你由基础到原理再到项目实战,轻松掌控核心技术
《Java编程的逻辑》致力于帮助读者真正理解Java编程。对于每个语言特性和API,不仅介绍其概念和用法,还分析了为什么要有这个概念,实现原理是什么,背后的思维逻辑是什么;对于类库,分析了大量源码,使读者不仅知其然,还知其所以然,以透彻理解相关知识点。
资深Java大牛带你由基础到原理再到项目实战,轻松掌控核心技术
|
3月前
|
存储 安全 Java
学习Java的高级特性
学习Java的高级特性是成为一名优秀的Java开发者的必备知识。在本文中,我们将深入探讨泛型、注解、反射和Lambda表达式这些高级特性,并提供相应的Java代码示例。