Java 8 是 Java 开发中的一个重要里程碑,引入了许多令人兴奋的新特性,特别是并发编程和Lambda表达式。这些特性不仅简化了代码的编写,还提高了程序的效率。在这篇文章中,我将通过50个实用案例,带你轻松上手Java 8的新特性。
Lambda表达式入门
Lambda表达式是Java 8的一大亮点,它使得编写匿名函数变得简单。以下是一些Lambda表达式的基本用法:
1. 简化匿名内部类
在Java 8之前,我们通常使用匿名内部类来实现接口或继承类。使用Lambda表达式,我们可以简化这个过程。
// 使用匿名内部类
List<String> list = new ArrayList<>();
Collections.sort(list, new Comparator<String>() {
@Override
public int compare(String s1, String s2) {
return s1.compareTo(s2);
}
});
// 使用Lambda表达式
List<String> list = new ArrayList<>();
Collections.sort(list, (String s1, String s2) -> s1.compareTo(s2));
2. 函数式接口
Lambda表达式通常用于函数式接口,即只包含一个抽象方法的接口。
@FunctionalInterface
interface Calculator {
int calculate(int a, int b);
}
// 使用Lambda表达式
Calculator add = (a, b) -> a + b;
System.out.println(add.calculate(10, 20)); // 输出30
并发编程
Java 8的并发API提供了许多简化并发编程的方法,以下是一些实用案例:
3. Stream API
Stream API是Java 8中用于并发编程的一个强大工具。它允许我们在集合上执行操作,如过滤、映射和排序,而不需要显式地编写循环。
List<String> list = Arrays.asList("a", "b", "c", "d", "e");
// 使用Stream API过滤并打印元素
list.stream().filter(s -> s.startsWith("a")).forEach(System.out::println);
4. CompletableFuture
CompletableFuture是Java 8中用于异步编程的一个新类。它允许你以非阻塞的方式执行异步操作。
CompletableFuture<String> future = CompletableFuture.supplyAsync(() -> {
// 执行耗时操作
return "Hello, world!";
});
future.thenApply(s -> "Welcome, " + s).thenAccept(System.out::println);
实用案例
以下是一些Java 8的实用案例,涵盖了并发和Lambda表达式:
5. 使用Lambda表达式进行文件过滤
List<File> files = Files.walk(Paths.get(".").toAbsolutePath().normalize())
.filter(Files::isRegularFile)
.map(Path::toFile)
.collect(Collectors.toList());
files.stream()
.filter(f -> f.getName().endsWith(".java"))
.forEach(System.out::println);
6. 使用Stream API进行数据转换
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
int sum = numbers.stream()
.filter(n -> n % 2 == 0)
.mapToInt(n -> n * 2)
.sum();
System.out.println(sum); // 输出12
7. 使用CompletableFuture进行异步操作
public class CompletableFutureExample {
public static void main(String[] args) {
CompletableFuture<String> future = CompletableFuture.supplyAsync(() -> {
// 模拟耗时操作
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
return "Hello, world!";
});
future.thenApply(s -> "Welcome, " + s).thenAccept(System.out::println);
}
}
通过以上案例,你将能够更好地理解和应用Java 8的新特性。希望这篇文章能帮助你轻松上手Java 8,并提高你的编程技能。
