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 filtered = people.stream() .filter(person -> person.getAge() > 25) .collect(Collectors.toList()); // 提取所有人的姓名 List 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 optional = Optional.of("Hello Java 8"); Optional 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 isEven = n -> n % 2 == 0; // Consumer示例 Consumer printer = System.out::println; // Function示例 java.util.function.Function stringToLength = String::length; // Supplier示例 java.util.function.Supplier randomSupplier = Math::random; ``` ## 学习建议 建议按以下顺序学习Java 8特性: 1. 先理解Lambda表达式的基本语法 2. 学习函数式接口的概念 3. 掌握Stream API的常用操作 4. 熟悉Optional类的使用场景 5. 了解新的日期时间API的优势