3.7 KiB
3.7 KiB
Java 8 特性示例项目
项目结构
src/main/java/
├── Main.java // 主程序入口
├── LambdaExample.java // Lambda表达式示例
├── StreamExample.java // Stream API示例
├── OptionalExample.java // Optional类示例
├── DateTimeExample.java // 新日期时间API示例
└── FunctionExample.java // 函数式接口示例
Java 8 特性详解
1. Lambda 表达式 (LambdaExample.java)
Lambda表达式是Java 8最重要的新特性之一,它允许把函数作为一个方法的参数(函数作为参数传递)。
主要示例:
- Runnable接口的Lambda简化写法
- 集合排序的Lambda表达式用法
- 不同形式的Lambda表达式语法
java
// 传统匿名内部类
Runnable oldRunnable = new Runnable() {
@Override
public void run() {
System.out.println("传统方式执行Runnable");
}
};
// Lambda表达式
Runnable newRunnable = () -> System.out.println("Lambda方式执行Runnable");
2. Stream API (StreamExample.java)
Stream API是Java 8中处理集合的关键抽象概念,它可以对集合进行各种操作,如过滤、映射、排序等。
主要示例:
- filter() 过滤操作
- map() 映射操作
- collect() 收集操作
- findFirst() 查找操作
- parallelStream() 并行流处理
java
// 过滤年龄大于25的人
List<Person> filtered = people.stream()
.filter(person -> person.getAge() > 25)
.collect(Collectors.toList());
// 提取所有人的姓名
List<String> names = people.stream()
.map(Person::getName)
.collect(Collectors.toList());
3. Optional 类 (OptionalExample.java)
Optional类是一个可以为null的容器对象,用来避免空指针异常,更好地处理可能为null的值。
主要示例:
- of() 和 empty() 创建Optional对象
- isPresent() 判断是否有值
- orElse() 提供默认值
- ifPresent() 存在时执行操作
- map() 转换值
java
Optional<String> optional = Optional.of("Hello Java 8");
Optional<String> emptyOptional = Optional.empty();
// 使用orElse提供默认值
String value = emptyOptional.orElse("默认值");
// 使用ifPresent执行操作
optional.ifPresent(s -> System.out.println("处理值: " + s.toUpperCase()));
4. 新的日期时间API (DateTimeExample.java)
Java 8引入了新的日期时间API(java.time包),解决了之前Date和Calendar类的缺陷。
主要示例:
- LocalDate 只包含日期
- LocalDateTime 包含日期和时间
- DateTimeFormatter 日期格式化
- plusWeeks(), minusMonths() 日期计算
java
// LocalDate示例
LocalDate today = LocalDate.now();
LocalDate specificDate = LocalDate.of(2025, 7, 18);
// LocalDateTime示例
LocalDateTime now = LocalDateTime.now();
// 日期格式化
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
String formattedDate = now.format(formatter);
5. 函数式接口 (FunctionExample.java)
Java 8提供了许多内置的函数式接口,如Predicate、Consumer、Function、Supplier等。
主要示例:
- Predicate 用于判断操作
- Consumer 用于消费数据
- Function 用于数据转换
- Supplier 用于生成数据
java
// Predicate示例
Predicate<Integer> isEven = n -> n % 2 == 0;
// Consumer示例
Consumer<String> printer = System.out::println;
// Function示例
java.util.function.Function<String, Integer> stringToLength = String::length;
// Supplier示例
java.util.function.Supplier<Double> randomSupplier = Math::random;
学习建议
建议按以下顺序学习Java 8特性:
- 先理解Lambda表达式的基本语法
- 学习函数式接口的概念
- 掌握Stream API的常用操作
- 熟悉Optional类的使用场景
- 了解新的日期时间API的优势