《Java核心技术 卷Ⅱ 高级特性(原书第10版)》一1.6 简单约简

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

1.6 简单约简
现在你已经看到了如何创建和转换流,我们终于可以讨论最重要的内容了,即从流数据中获得答案。我们在本节所讨论的方法被称为约简。约简是一种终结操作(terminal operation),它们会将流约简为可以在程序中使用的非流值。
你已经看到过一种简单约简:count方法会返回流中元素的数量。
其他的简单约简还有max和min,它们会返回最大值和最小值。这里要稍作解释,这些方法返回的是一个类型Optional的值,它要么在其中包装了答案,要么表示没有任何值(因为流碰巧为空)。在过去,碰到这种情况返回null是很常见的,但是这样做会导致在未做完备测试的程序中产生空指针异常。Optional类型是一种更好的表示缺少返回值的方式。我们将在下一节中详细讨论Optional类型。下面展示了可以如何获得流中的最大值:
image
findFirst返回的是非空集合中的第一个值。它通常会在与f?ilter组合使用时显得很有用。例如,下面展示了如何找到第一个以字母Q开头的单词,前提是存在这样的单词:
image

如果不强调使用第一个匹配,而是使用任意的匹配都可以,那么就可以使用f?indAny方法。这个方法在并行处理流时会很有效,因为流可以报告任何它找到的匹配而不是被限制为必须报告第一个匹配。
image

如果只想知道是否存在匹配,那么可以使用anyMatch。这个方法会接受一个断言引元,因此不需要使用filter。
image

还有allMatch和noneMatch方法,它们分别会在所有元素和没有任何元素匹配断言的情况下返回true。这些方法也可以通过并行运行而获益。
java.util.stream.Stream 8

  • Optional max(Comparator<? super T> comparator)
  • Optional min(Comparator<? super T> comparator)
    分别产生这个流的最大元素和最小元素,使用由给定比较器定义的排序规则,如果这个流为空,会产生一个空的Optional对象。这些操作都是终结操作。
  • Optional f?indFirst()
  • Optional f?indAny()
    分别产生这个流的第一个和任意一个元素,如果这个流为空,会产生一个空的Optional对象。这些操作都是终结操作。
  • boolean anyMatch(Predicate<? super T> predicate)
  • boolean allMatch(Predicate<? super T> predicate)
  • boolean noneMatch(Predicate<? super T> predicate)
    分别在这个流中任意元素、所有元素和没有任何元素匹配给定断言时返回true。这些操作都是终结操作。
相关文章
|
1月前
|
NoSQL Java 数据库连接
深入探索 Java 后台开发的核心技术
【4月更文挑战第5天】本文探讨了Java后台开发的关键技术,包括Spring框架与Spring Boot的使用,MyBatis和Hibernate的ORM选择,关系型与NoSQL数据库的适用场景,线程池与异步处理在并发中的作用,微服务架构及RESTful API设计。这些核心技术有助于开发者打造稳定、高性能的Java后台系统,适应不断发展的云计算和人工智能需求。
|
4月前
|
开发框架 Java API
最新Java基础系列课程--Day13-高级特性(二)
最新Java基础系列课程--Day13-高级特性
|
5月前
|
存储 缓存 安全
《java核心技术36讲》学习笔记-------杨晓峰(极客时间)
《java核心技术36讲》学习笔记-------杨晓峰(极客时间)
59 0
|
16天前
|
Java API
Java从入门到精通:2.1.5深入学习Java核心技术之文件操作
Java从入门到精通:2.1.5深入学习Java核心技术之文件操作
|
16天前
|
并行计算 算法 安全
Java从入门到精通:2.1.3深入学习Java核心技术——掌握Java多线程编程
Java从入门到精通:2.1.3深入学习Java核心技术——掌握Java多线程编程
|
4月前
|
Java 程序员 API
最新Java基础系列课程--Day13-高级特性(三)
最新Java基础系列课程--Day13-高级特性
|
4月前
|
开发框架 Java 程序员
最新Java基础系列课程--Day13-高级特性(一)
最新Java基础系列课程--Day13-高级特性
|
4月前
|
Java 测试技术 API
【Java技术深入解析】「核心技术提升」最流行的Java模拟框架Mockito入门指南(Java单元测试)
还在使用 Mockito 1.x?看看 Mockito 2 有哪些新功能!Mockito 3 没有引入任何破坏性的 API 变动,但现在需要 Java 8 而不是 Mockito 2 的 Java 6。 Mockito 4 删除了过时的 API。Mockito 5 将默认 mockmaker 改为 mockito-inline,现在需要 Java 11。一次只支持一个主要版本,而且不会向旧版本回传更改内容。
74 0
【Java技术深入解析】「核心技术提升」最流行的Java模拟框架Mockito入门指南(Java单元测试)
|
5月前
|
开发框架 Java 程序员
最新Java基础系列课程--Day13-高级特性
最新Java基础系列课程--Day13-高级特性
|
5月前
|
存储 Java 编译器
《Java 核心技术卷1 基础知识》第三章 Java 的基本程序设计结构 笔记(下)
《Java 核心技术卷1 基础知识》第三章 Java 的基本程序设计结构 笔记
82 0