Java 8 新特性介绍
目录
1. Lambda 表达式
2. 函数式接口
3. Stream API
4. 方法引用
5. 默认方法
6. Optional 类
7. 新的日期时间 API
8. 并行数组排序
总结
Java 8 引入了多项革命性特性,显著提升了开发效率和代码可读性。以下是核心特性及代码示例:
1. Lambda 表达式
简化函数式编程,替代匿名内部类。
// 传统写法
Runnable r1 = new Runnable() {@Overridepublic void run() {System.out.println("Hello");}
};// Lambda 写法
Runnable r2 = () -> System.out.println("Hello");
2. 函数式接口
使用 @FunctionalInterface
注解标记仅含一个抽象方法的接口。
@FunctionalInterface
interface MathOperation {int operate(int a, int b); // 唯一抽象方法
}public static void main(String[] args) {MathOperation add = (a, b) -> a + b; // Lambda 实现System.out.println(add.operate(5, 3)); // 输出 8
}
3. Stream API
提供声明式数据集合处理能力。
List<String> names = Arrays.asList("Alice", "Bob", "Charlie");// 过滤并输出长度>3的名字
names.stream().filter(name -> name.length() > 3).forEach(System.out::println); // 输出 Alice, Charlie
4. 方法引用
简化 Lambda 表达式,通过 ::
操作符引用方法。
List<Integer> numbers = Arrays.asList(1, 2, 3);// 传统 Lambda
numbers.forEach(x -> System.out.println(x));// 方法引用
numbers.forEach(System.out::println); // 等效写法
5. 默认方法
允许在接口中定义默认实现,避免破坏现有代码。
interface Vehicle {default void start() { // 默认方法System.out.println("Engine started");}
}class Car implements Vehicle {// 无需重写 start()
}public static void main(String[] args) {new Car().start(); // 输出 "Engine started"
}
6. Optional 类
优雅处理 null
值,减少空指针异常。
Optional<String> name = Optional.ofNullable(getName()); // 可能为 null 的方法// 安全取值
String result = name.orElse("Default");
System.out.println(result); // 若非空则输出值,否则输出 "Default"
7. 新的日期时间 API
java.time
包解决旧 Date
类的线程安全问题。
// 获取当前日期
LocalDate today = LocalDate.now();
System.out.println(today); // 输出如 2023-10-05// 日期计算
LocalDate nextWeek = today.plusWeeks(1);
System.out.println(nextWeek); // 输出 2023-10-12
8. 并行数组排序
利用多核处理器加速排序。
int[] numbers = {5, 3, 9, 1, 7};// 单线程排序
Arrays.sort(numbers); // 并行排序(大数据量时更快)
Arrays.parallelSort(numbers);
总结
Java 8 通过 Lambda、Stream、函数式接口等特性实现了:
- 代码简洁性:减少模板代码(如匿名内部类)
- 并发优化:Stream 并行处理提升性能
- 健壮性:Optional 减少空指针异常
- 现代化:日期 API 修复设计缺陷
这些特性使 Java 更适合现代高并发、函数式编程场景。