Java 8新特性实战指南:轻松掌握Stream API与Lambda表达式应用实例

2026-10-28 0 阅读

Java 8引入了许多新特性,其中Stream API和Lambda表达式是两大亮点。Stream API允许我们以声明式的方式处理数据集合,而Lambda表达式则使得Java代码更加简洁和易于理解。本文将深入探讨这两个特性的应用,并通过实例展示如何在实际项目中使用它们。

Stream API简介

Stream API是Java 8引入的一个新的抽象层,用于处理集合(如List、Set、Map等)中的元素。它允许我们以声明式的方式对集合进行操作,如排序、过滤、映射等。Stream API的主要特点包括:

  • 延迟执行:Stream API中的操作不会立即执行,而是在一个终端操作(如forEach、collect等)触发时才执行。
  • 并行处理:Stream API支持并行处理,可以充分利用多核处理器的性能。
  • 函数式编程:Stream API允许我们使用函数式编程风格,如Lambda表达式。

Lambda表达式简介

Lambda表达式是Java 8引入的一个新的语法结构,它允许我们以更简洁的方式编写匿名函数。Lambda表达式主要用于实现函数式接口,这些接口只包含一个抽象方法。Lambda表达式的主要特点包括:

  • 简洁性:Lambda表达式可以减少代码量,提高代码的可读性。
  • 灵活性:Lambda表达式可以轻松地与Stream API结合使用。

Stream API与Lambda表达式实战实例

下面将通过几个实例来展示如何使用Stream API和Lambda表达式。

实例1:过滤和排序

假设我们有一个学生列表,包含学生的姓名和年龄,我们需要找出所有年龄大于18岁的学生,并按年龄升序排序。

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

public class StreamExample {
    public static void main(String[] args) {
        List<Student> students = Arrays.asList(
            new Student("Alice", 20),
            new Student("Bob", 17),
            new Student("Charlie", 19),
            new Student("David", 18)
        );

        List<Student> filteredStudents = students.stream()
            .filter(student -> student.getAge() > 18)
            .sorted((s1, s2) -> s1.getAge() - s2.getAge())
            .collect(Collectors.toList());

        filteredStudents.forEach(student -> System.out.println(student.getName() + " - " + student.getAge()));
    }
}

class Student {
    private String name;
    private int age;

    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public int getAge() {
        return age;
    }
}

实例2:映射和收集

假设我们有一个学生列表,我们需要提取出所有学生的姓名,并使用收集器将它们收集到一个新的列表中。

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

public class StreamExample {
    public static void main(String[] args) {
        List<Student> students = Arrays.asList(
            new Student("Alice", 20),
            new Student("Bob", 17),
            new Student("Charlie", 19),
            new Student("David", 18)
        );

        List<String> names = students.stream()
            .map(Student::getName)
            .collect(Collectors.toList());

        names.forEach(System.out::println);
    }
}

class Student {
    private String name;
    private int age;

    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public int getAge() {
        return age;
    }
}

实例3:并行处理

假设我们有一个大型的学生列表,我们需要计算所有学生的年龄总和。使用并行处理可以提高性能。

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

public class StreamExample {
    public static void main(String[] args) {
        List<Student> students = Arrays.asList(
            // 假设这里有大量的学生数据
        );

        int totalAge = students.parallelStream()
            .mapToInt(Student::getAge)
            .sum();

        System.out.println("Total age: " + totalAge);
    }
}

class Student {
    private String name;
    private int age;

    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public int getAge() {
        return age;
    }
}

总结

Stream API和Lambda表达式是Java 8引入的两个重要特性,它们使得Java代码更加简洁、易读和易于维护。通过本文的实例,我们可以看到如何在实际项目中使用Stream API和Lambda表达式。希望这些实例能够帮助你更好地理解和应用这两个特性。

分享到: