2025-08-05 18:53:13 +08:00

142 lines
3.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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引入了新的日期时间APIjava.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特性
1. 先理解Lambda表达式的基本语法
2. 学习函数式接口的概念
3. 掌握Stream API的常用操作
4. 熟悉Optional类的使用场景
5. 了解新的日期时间API的优势