Java 8 概览:函数式编程、流式 API 与日期时间新特性
Java 8 核心特性
Java 8 于 2014 年 3 月 18 日发布,是里程碑版本,引入函数式编程能力、新 JS 引擎、日期时间 API、流式处理等:
| 特性 | 说明 |
|---|---|
| Lambda 表达式 | 函数式编程入口,简化匿名内部类,(a,b) -> a+b。 |
| 方法引用 | :: 语法引用现有方法,如 System.out::println。 |
| 默认方法 | 接口含实现的方法,default 关键字,兼容旧接口演进。 |
| Stream API | 声明式数据处理管道,filter/map/reduce/collect,支持并行流。 |
| Date/Time API | java.time 包,不可变、线程安全、领域驱动设计。 |
| Optional | 容器化可为空值,消除 null 检查泛滥,ifPresent/orElse。 |
| Nashorn JS 引擎 | JVM 上运行 JavaScript,后续版本移除(Java 15 移除)。 |
| 新工具 | jdeps 依赖分析、jjs JS Shell、javac -parameters 保留参数名。 |
Lambda 与方法引用对比示例
import java.util.*;
import java.util.Comparator;
public class Java8Tester {
public static void main(String[] args) {
List names1 = Arrays.asList("Mahesh", "Suresh", "Ramesh", "Naresh", "Kalpesh");
List names2 = new ArrayList<>(names1);
// Java 7 匿名内部类
Collections.sort(names1, new Comparator() {
@Override public int compare(String s1, String s2) { return s1.compareTo(s2); }
});
// Java 8 Lambda
Collections.sort(names2, (s1, s2) -> s1.compareTo(s2));
// Java 8 方法引用(更简洁)
Collections.sort(names2, String::compareTo);
System.out.println(names1); // [Kalpesh, Mahesh, Naresh, Ramesh, Suresh]
System.out.println(names2); // [Kalpesh, Mahesh, Naresh, Ramesh, Suresh]
}
}
函数式接口与 @FunctionalInterface
单抽象方法接口(SAM)可隐式转换为 Lambda。标注 @FunctionalInterface 可编译期校验。
核心包 java.util.function 提供 40+ 标准函数式接口:Predicate、Function、Consumer、Supplier、BinaryOperator 等及其原语特化。
Stream API 核心模式
List result = list.stream()
.filter(s -> s.length() > 3)
.map(String::toUpperCase)
.distinct()
.sorted()
.limit(10)
.collect(Collectors.toList());
- 中间操作:
filter/map/flatMap/distinct/sorted/limit/skip,返回流,惰性求值。 - 终端操作:
collect/forEach/reduce/count/min/max/findFirst/anyMatch,触发计算。 - 并行流:
parallelStream()或stream().parallel()自动利用多核。
日期时间 API 核心类
| 类 | 用途 |
|---|---|
LocalDate | 日期(年月日),无时区 |
LocalTime | 时间(时分秒纳秒),无时区 |
LocalDateTime | 日期时间,无时区 |
ZonedDateTime | 带时区日期时间 |
Instant | 时间戳(UTC),机器时间 |
Duration/Period | 时间量/日期量 |
DateTimeFormatter | 线程安全格式化/解析 |
全部不可变、线程安全,彻底解决 java.util.Date/Calendar 设计缺陷。
java
- 掌握 C# 字符串:基础、操作与进阶技巧完全指南
- 精通 Java 运算符:类型、语法与实战示例
- 精通 Java 字符串:创建、方法与最佳实践
- 精通 Java 接口:概念、实现与最佳实践
- 精通 Java 枚举字符串表示:默认行为、toString 重写与进阶模式
- 精通 Java Try-With-Resources:自动资源管理详解
- Java 注解详解:类型、放置位置与实战示例
- Java String length() 方法:获取字符串长度(示例)
- 精通 Java String.indexOf():定位子字符串与实战示例
- Java String.charAt() 详解:语法、返回类型、异常与实战示例
- 精通 Java String compareTo():语法、用例与实战示例
- 精通 Java String.endsWith():检查字符串后缀(示例)