《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 数据挖掘 开发者
Java网络编程进阶:Socket通信的高级特性与应用
【6月更文挑战第21天】Java Socket通信是分布式应用的基础,涉及高级特性如多路复用(Selector)和零拷贝,提升效率与响应速度。结合NIO和AIO,适用于高并发场景如游戏服务器和实时数据分析。示例展示了基于NIO的多路复用服务器实现。随着技术发展,WebSockets、HTTP/2、QUIC等新协议正变革网络通信,掌握Socket高级特性为应对未来挑战准备。
|
2月前
|
XML Java API
你必须掌握的 21 个 Java 核心技术!,千峰Java
你必须掌握的 21 个 Java 核心技术!,千峰Java
|
2月前
|
安全 Java API
java的高级特性
Java的关键特性包括:跨平台能力,依赖JVM实现“一次编写,到处运行”;面向对象编程,通过类和对象抽象提高代码复用和维护性;内置安全机制如内存管理和异常处理;丰富的标准类库提供各种API;以及支持多线程,充分利用CPU资源。学习路线上,从基础的面向对象和类库使用开始,逐渐深入到多线程和高级特性。
24 1
|
1月前
|
存储 Java 编译器
Java核心技术第八章-泛型
Java核心技术第八章-泛型
|
1月前
|
存储 安全 Java
Java Map新玩法:探索HashMap和TreeMap的高级特性,让你的代码更强大!
【6月更文挑战第18天】在Java中,Map的两大代表HashMap和TreeMap提供高效键值对操作。HashMap允许设定初始容量和加载因子以优化性能,非线程安全,可借助synchronized或ConcurrentHashMap处理多线程。遍历可通过entrySet()、keySet()和values()。而TreeMap依据键进行排序,支持自然排序和自定义Comparator,提供范围查询、获取首尾键的功能,适用于需有序遍历的场景。理解和利用这些特性能增强代码功能和效率。
|
2月前
|
Java API
Java从入门到精通:2.1.5深入学习Java核心技术之文件操作
Java从入门到精通:2.1.5深入学习Java核心技术之文件操作
|
2月前
|
Java API
Java从入门到精通:2.1.4深入学习Java核心技术——Java的输入输出流
Java从入门到精通:2.1.4深入学习Java核心技术——Java的输入输出流
|
2月前
|
IDE Java 程序员
Java程序员必备的21个核心技术,你都掌握了哪些?,深入浅出Java开发
Java程序员必备的21个核心技术,你都掌握了哪些?,深入浅出Java开发
|
2月前
|
消息中间件 存储 Java
Java从入门到精通:3.1.1掌握EJB、JPA、JMS等Java EE核心技术
Java从入门到精通:3.1.1掌握EJB、JPA、JMS等Java EE核心技术
|
XML JSON 网络协议
你必须掌握的 21 个 Java 核心技术!
写这篇文章的目的是想总结一下自己这么多年来使用java的一些心得体会,希望可以给大家一些经验,能让大家更好学习和使用Java。 这次介绍的主要内容是和J2SE相关的部分,另外,会在以后再介绍些J2EE相关的、和Java中各个框架相关的内容。 经过这么多年的Java开发,以及结合平时面试Java开发者的一些经验,我觉得对于J2SE方面主要就是要掌握以下的一些内容。
你必须掌握的 21 个 Java 核心技术!