Java 8 是 Java 发展历程中的一个重要里程碑,自 2014 年发布以来,它引入了许多新的特性和改进,极大地丰富了 Java 语言的库和工具集。本文将深入解析 Java 8 的关键新特性,并通过实战案例帮助你轻松上手。
Lambda 表达式与函数式编程
Lambda 表达式是 Java 8 中最引人注目的特性之一。它允许开发者以更简洁的方式编写匿名函数,从而实现函数式编程。
实战案例:使用 Lambda 表达式实现线程池
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class LambdaThreadExample {
public static void main(String[] args) {
ExecutorService executor = Executors.newCachedThreadPool(runnable -> {
Thread thread = new Thread(runnable);
thread.setDaemon(true);
return thread;
});
for (int i = 0; i < 10; i++) {
executor.submit(() -> System.out.println("Hello from thread " + i));
}
executor.shutdown();
}
}
在这个例子中,我们使用了 Lambda 表达式来创建一个具有守护线程的线程池。
Stream API
Stream API 是 Java 8 中另一个重要的特性,它允许开发者以声明式方式处理数据集合。
实战案例:使用 Stream API 处理集合
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
public class StreamExample {
public static void main(String[] args) {
List<String> strings = Arrays.asList("abc", "", "bc", "efg", "abcd","", "jkl");
List<String> filtered = strings.stream()
.filter(s -> !s.isEmpty())
.map(String::toUpperCase)
.sorted()
.collect(Collectors.toList());
System.out.println(filtered);
}
}
在这个例子中,我们使用 Stream API 来过滤、转换和排序字符串列表。
Optional 类
Optional 类是 Java 8 中用于避免空指针异常的一种方式。
实战案例:使用 Optional 类处理可能为 null 的对象
import java.util.Optional;
public class OptionalExample {
public static void main(String[] args) {
Optional<String> name = Optional.ofNullable(getName());
name.ifPresent(System.out::println);
}
private static String getName() {
// 模拟可能返回 null 的情况
return null;
}
}
在这个例子中,我们使用 Optional 来安全地处理可能为 null 的对象。
引入日期和时间 API
Java 8 引入了一个全新的日期和时间 API,它提供了更好的日期和时间处理能力。
实战案例:使用新的日期和时间 API
import java.time.LocalDate;
import java.time.LocalTime;
import java.time.format.DateTimeFormatter;
public class DateTimeExample {
public static void main(String[] args) {
LocalDate date = LocalDate.now();
LocalTime time = LocalTime.now();
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd/MM/yyyy HH:mm:ss");
System.out.println("Current date: " + date.format(formatter));
System.out.println("Current time: " + time.format(formatter));
}
}
在这个例子中,我们使用新的日期和时间 API 来获取当前日期和时间,并将其格式化为字符串。
总结
Java 8 的这些新特性极大地增强了 Java 语言的 expressive power 和 productivity。通过本文的实战案例,你可以更好地理解这些新特性,并在实际项目中应用它们。记住,实践是学习的关键,不断尝试和探索,你将能够熟练掌握 Java 8 的这些新特性。