Java 8新特性实战解析:从Stream API到Lambda表达式,20个案例教你轻松掌握核心技巧

2026-10-23 0 阅读

Java 8作为Java语言的一个重要版本,引入了大量的新特性和改进。其中,Stream API和Lambda表达式是Java 8中最受关注的特性之一。本文将通过20个实战案例,详细解析Java 8的新特性,帮助读者轻松掌握Stream API和Lambda表达式的核心技巧。

1. Lambda表达式简介

Lambda表达式是Java 8引入的一种新的语法结构,它允许我们用更简洁的方式编写匿名函数。Lambda表达式通常用于实现接口的实例,这些接口只有一个抽象方法,称为函数式接口。

1.1 Lambda表达式的基本语法

interface MyInterface {
    void doSomething();
}

public class Main {
    public static void main(String[] args) {
        MyInterface myInterface = () -> System.out.println("Hello, Lambda!");
        myInterface.doSomething();
    }
}

在上面的例子中,MyInterface是一个函数式接口,它只有一个抽象方法doSomething。Lambda表达式(()->System.out.println("Hello, Lambda!"))实现了这个接口,并重写了doSomething方法。

1.2 Lambda表达式的作用域

Lambda表达式可以访问其所在方法的外部变量,这些变量被称为有效 final 变量。以下是一个示例:

public class Main {
    public static void main(String[] args) {
        final int num = 10;
        MyInterface myInterface = num -> System.out.println(num);
        myInterface.doSomething();
    }
}

在这个例子中,num是一个有效 final 变量,Lambda表达式可以访问它。

2. Stream API简介

Stream API是Java 8引入的一种新的抽象层,用于处理数据集合。Stream API允许我们对集合进行各种操作,如过滤、映射、排序和归约等。

2.1 Stream API的基本概念

Stream API包含以下几个基本概念:

  • Stream:数据流,它表示一系列元素。
  • 收集器:用于收集操作结果的容器。
  • 中间操作:对Stream进行操作,如过滤、映射等。
  • 终端操作:对Stream进行最终操作,如收集、排序等。

2.2 Stream API的基本语法

import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;

public class Main {
    public static void main(String[] args) {
        List<String> list = Arrays.asList("a", "b", "c", "d", "e");
        List<String> result = list.stream()
                                  .filter(s -> s.startsWith("a"))
                                  .map(String::toUpperCase)
                                  .collect(Collectors.toList());
        System.out.println(result);
    }
}

在上面的例子中,我们使用Stream API对list进行过滤、映射和收集操作,最终得到一个只包含以字母”a”开头的字符串列表。

3. 20个实战案例

以下列举了20个实战案例,帮助读者更好地理解和应用Java 8的新特性。

3.1 使用Lambda表达式实现排序

List<String> list = Arrays.asList("c", "a", "b", "d", "e");
list.sort((s1, s2) -> s1.compareTo(s2));
System.out.println(list);

3.2 使用Stream API实现集合元素去重

Set<String> set = list.stream()
                       .distinct()
                       .collect(Collectors.toSet());
System.out.println(set);

3.3 使用Stream API实现集合元素分组

Map<String, List<String>> map = list.stream()
                                     .collect(Collectors.groupingBy(String::length));
System.out.println(map);

3.4 使用Stream API实现集合元素过滤

List<String> filteredList = list.stream()
                                .filter(s -> s.startsWith("a"))
                                .collect(Collectors.toList());
System.out.println(filteredList);

3.5 使用Stream API实现集合元素映射

List<String> mappedList = list.stream()
                               .map(String::toUpperCase)
                               .collect(Collectors.toList());
System.out.println(mappedList);

3.6 使用Stream API实现集合元素归约

int sum = list.stream()
              .mapToInt(Integer::intValue)
              .sum();
System.out.println(sum);

3.7 使用Lambda表达式实现多线程

ExecutorService executorService = Executors.newFixedThreadPool(2);
for (int i = 0; i < 10; i++) {
    int finalI = i;
    executorService.submit(() -> System.out.println(finalI));
}
executorService.shutdown();

3.8 使用Lambda表达式实现事件监听

JButton button = new JButton("Click me!");
button.addActionListener(e -> System.out.println("Button clicked!"));

3.9 使用Lambda表达式实现函数式接口

MyInterface myInterface = () -> System.out.println("Hello, Lambda!");

3.10 使用Stream API实现集合元素遍历

list.stream().forEach(s -> System.out.println(s));

3.11 使用Stream API实现集合元素并行处理

long count = list.parallelStream().filter(s -> s.startsWith("a")).count();
System.out.println(count);

3.12 使用Stream API实现集合元素排序

list.sort((s1, s2) -> s1.compareTo(s2));
System.out.println(list);

3.13 使用Stream API实现集合元素分组

Map<String, List<String>> map = list.stream()
                                     .collect(Collectors.groupingBy(String::length));
System.out.println(map);

3.14 使用Stream API实现集合元素过滤

List<String> filteredList = list.stream()
                                .filter(s -> s.startsWith("a"))
                                .collect(Collectors.toList());
System.out.println(filteredList);

3.15 使用Stream API实现集合元素映射

List<String> mappedList = list.stream()
                               .map(String::toUpperCase)
                               .collect(Collectors.toList());
System.out.println(mappedList);

3.16 使用Stream API实现集合元素归约

int sum = list.stream()
              .mapToInt(Integer::intValue)
              .sum();
System.out.println(sum);

3.17 使用Lambda表达式实现多线程

ExecutorService executorService = Executors.newFixedThreadPool(2);
for (int i = 0; i < 10; i++) {
    int finalI = i;
    executorService.submit(() -> System.out.println(finalI));
}
executorService.shutdown();

3.18 使用Lambda表达式实现事件监听

JButton button = new JButton("Click me!");
button.addActionListener(e -> System.out.println("Button clicked!"));

3.19 使用Lambda表达式实现函数式接口

MyInterface myInterface = () -> System.out.println("Hello, Lambda!");

3.20 使用Stream API实现集合元素遍历

list.stream().forEach(s -> System.out.println(s));

通过以上20个实战案例,相信读者已经对Java 8的新特性有了更深入的了解。希望本文能够帮助读者在Java编程实践中更好地运用Stream API和Lambda表达式,提高开发效率。

分享到: