Java9新特性:StreamsAPI更新与平台日志系统
立即解锁
发布时间: 2025-08-18 02:22:48 阅读量: 2 订阅数: 8 

### Java 9 新特性:Streams API 更新与平台日志系统
在 Java 9 中,Streams API 与平台日志系统都有了重要的更新。这些更新为开发者提供了更多便利,让代码编写更加高效。接下来,我们将详细探讨这些新特性。
#### 1. Streams API 更新
JDK 9 为 Streams API 添加了一些便利方法,使流处理更加容易,并允许使用收集器编写复杂查询。
##### 1.1 Stream 接口的新方法
Stream 接口新增了四个方法:`dropWhile()`、`takeWhile()`、`ofNullable()` 和 `iterate()`。
- **dropWhile()**:对于有序流,该方法会丢弃从流开头开始满足指定谓词的元素,返回剩余元素。对于无序流,其行为是非确定性的,可能会丢弃满足谓词的任意子集元素。当前实现是从开头丢弃匹配元素,直到找到不匹配的元素。
- **takeWhile()**:与 `dropWhile()` 方法类似,但它返回从流开头开始满足指定谓词的元素,丢弃其余元素。
- **ofNullable(T t)**:如果指定元素不为 null,则返回包含该元素的单元素流;如果指定元素为 null,则返回空流。
- **iterate(T seed, Predicate<? super T> hasNext, UnaryOperator<T> next)**:使用初始种子值和指定的下一个函数迭代应用,创建一个顺序(可能是无限的)流。当指定的 `hasNext` 谓词返回 false 时,迭代停止。
##### 1.2 Collectors 类的新方法
Collectors 类在 JDK 9 中新增了两个方法:`filtering()` 和 `flatMapping()`。
- **filtering()**:返回一个收集器,在收集元素之前应用过滤器。如果指定谓词对某个元素返回 true,则收集该元素;否则,不收集该元素。
- **flatMapping()**:返回一个收集器,在收集元素之前应用扁平映射函数。将指定的扁平映射函数应用于流的每个元素,并累积从扁平映射器返回的流的元素。
#### 2. 平台日志系统
JDK 9 对平台类(JDK 类)和 JVM 组件的日志系统进行了全面改进。
##### 2.1 平台日志 API
Java SE 9 新增了平台日志 API,可用于指定日志记录器,如 Log4j、SLF4J 或自定义日志记录器,供 Java 平台类(JDK 中的类)记录消息。需要注意的是,该 API 是供 JDK 中的类使用的,而不是应用程序类。应用程序消息应使用自己的日志框架(如 Log4j)进行记录,并且该 API 不允许以编程方式配置日志记录器。
平台日志 API 由以下部分组成:
- **java.lang.System.LoggerFinder**:一个抽象静态类,作为服务接口。
- **java.lang.System.Logger**:提供日志记录 API 的接口。
- **java.lang.System 类中的重载方法 getLogger()**:返回一个 `System.Logger`。
配置平台日志记录器的详细步骤取决于要使用的日志记录器。以 Log4j 为例,需要分别配置 Log4j 框架和平台日志记录器。配置平台日志记录器的步骤如下:
1. 创建一个实现 `System.Logger` 接口的类。
2. 为 `System.LoggerFinder` 服务接口创建一个实现。
3. 在模块声明中指定该实现。
##### 2.2 设置 Log4j 库
要使用 Log4j 2.0 作为平台日志记录器,需要下载 Log4j 2.0 库。所需的 JAR 文件可以从 https://logging.apache.org/log4j/2.0/download.html 下载。下载并解压文件后,将以下两个 JAR 文件复制到指定目录(如 `C:\Java8Revealed\extlib`):
- `log4j-api-2.8.jar`
- `log4j-core-2.8.jar`
这些 JAR 文件将作为自动模块使用,自动模块名称将从 JAR 文件名派生,分别为 `log4j.api` 和 `log4j.core`。
##### 2.3 设置 NetBeans 项目
在 NetBeans 中创建一个名为 `com.jdojo.logger` 的 Java 项目,并将上述两个 Log4j JAR 文件添加到项目的模块路径中。在 NetBeans 中添加 JAR 文件到模块路径的步骤如下:
1. 展开添加到模块路径的菜单。
2. 选择“Add JAR/Folder”选项。
##### 2.4 定义模块
所有类和资源都将位于名为 `com.jdojo.logger` 的模块中,其模块声明如下:
```java
// module-info.java
module com.jdojo.logger {
requires log4j.api;
requires log4j.core;
exports com.jdojo.logger;
provides java.lang.System.LoggerFinder
with com.jdojo.logger.Log4jLoggerFinder;
}
```
前两个 `requires` 语句声明了对 Log4j JAR 文件的依赖,`exports` 语句导出该模块的 `com.jdojo.logger` 包中的所有类型,`provides` 语句指定了 `com.jdojo.logger.Log4jLoggerFinder` 类作为 `java.lang.System.LoggerFinder` 服务接口的实现。
##### 2.5 添加 Log4j 配置文件
将名为 `log4j2.xml` 的配置文件放在 NetBeans 项目的源代码根目录(即未命名包)中。该配置将使 Log4j 将消息记录到当前目录下的 `logs/platform.log` 文件中。配置文件内容如下:
```xml
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="error">
<Appenders>
<File name="JdojoLogFile" fileName="logs/platform.log">
<PatternLayout>
<Pattern>%d %p %c [%t] %m%n</Pattern>
</PatternLayout>
</File>
<Async name="Async">
<AppenderRef ref="JdojoLogFile"/>
</Async>
</
```
0
0
复制全文
相关推荐










