Java 8新特性:轻松入门,实战案例教你玩转Stream与Lambda表达式

2026-10-12 0 阅读

Java 8是Java语言的一个重要版本,它引入了许多新特性,其中最引人注目的当属Stream和Lambda表达式。这些特性极大地简化了Java编程,提高了代码的可读性和性能。本文将带你轻松入门Java 8的新特性,并通过实战案例教你如何玩转Stream与Lambda表达式。

一、Java 8简介

Java 8发布于2014年,是Java历史上一个重要的里程碑。它引入了函数式编程的概念,使得Java语言更加现代化和强大。Java 8的许多新特性都旨在提高开发效率和代码质量。

二、Stream概述

Stream是Java 8引入的一个强大的抽象概念,它允许我们以声明式的方式处理集合。Stream可以将集合转换成一系列的操作,如过滤、排序、映射等。Stream操作是延迟执行的,这意味着只有当真正需要结果时才会执行。

2.1 Stream的基本用法

以下是一个使用Stream的简单示例:

import java.util.Arrays;
import java.util.List;

public class StreamExample {
    public static void main(String[] args) {
        List<String> list = Arrays.asList("Java", "C++", "Python", "Go");

        // 使用Stream过滤出所有长度大于3的字符串
        list.stream()
            .filter(s -> s.length() > 3)
            .forEach(System.out::println);
    }
}

在上面的例子中,我们创建了一个包含编程语言的列表,然后使用Stream对其进行过滤,只保留长度大于3的字符串,并打印出来。

2.2 Stream操作类型

Stream操作主要分为以下几类:

  • 中间操作:如filter、map、sorted等,它们会返回一个新的Stream。
  • 终端操作:如forEach、collect、reduce等,它们会处理Stream中的元素并返回一个值或一个集合。

三、Lambda表达式概述

Lambda表达式是Java 8引入的另一个重要特性,它允许我们以更简洁的方式编写函数式接口的实现。

3.1 Lambda表达式的基本语法

Lambda表达式的基本语法如下:

(参数列表) -> { 表达式或语句块 }

以下是一个使用Lambda表达式的示例:

import java.util.Arrays;
import java.util.List;

public class LambdaExample {
    public static void main(String[] args) {
        List<String> list = Arrays.asList("Java", "C++", "Python", "Go");

        // 使用Lambda表达式对列表进行排序
        list.sort((s1, s2) -> s1.length() - s2.length());

        // 使用Lambda表达式遍历列表
        list.forEach(s -> System.out.println(s));
    }
}

在上面的例子中,我们使用Lambda表达式对列表进行排序,并遍历列表打印每个元素。

3.2 函数式接口

Lambda表达式通常用于函数式接口,即只有一个抽象方法的接口。Java 8引入了@FunctionalInterface注解来标识函数式接口。

四、实战案例

以下是一些使用Stream和Lambda表达式的实战案例:

4.1 计算列表中字符串的平均长度

import java.util.Arrays;
import java.util.List;

public class StreamExample {
    public static void main(String[] args) {
        List<String> list = Arrays.asList("Java", "C++", "Python", "Go");

        // 使用Stream计算列表中字符串的平均长度
        double averageLength = list.stream()
            .mapToInt(String::length)
            .average()
            .orElse(0);

        System.out.println("Average length: " + averageLength);
    }
}

4.2 查找列表中第一个以特定字母开头的字符串

import java.util.Arrays;
import java.util.List;

public class StreamExample {
    public static void main(String[] args) {
        List<String> list = Arrays.asList("Java", "C++", "Python", "Go");

        // 使用Stream查找列表中第一个以"C"开头的字符串
        String firstStringStartingWithC = list.stream()
            .filter(s -> s.startsWith("C"))
            .findFirst()
            .orElse(null);

        System.out.println("First string starting with 'C': " + firstStringStartingWithC);
    }
}

4.3 使用Stream对列表进行排序和映射

import java.util.Arrays;
import java.util.List;

public class StreamExample {
    public static void main(String[] args) {
        List<String> list = Arrays.asList("Java", "C++", "Python", "Go");

        // 使用Stream对列表进行排序和映射
        List<String> sortedAndMappedList = list.stream()
            .sorted((s1, s2) -> s1.length() - s2.length())
            .map(s -> s.toUpperCase())
            .collect(Collectors.toList());

        System.out.println("Sorted and mapped list: " + sortedAndMappedList);
    }
}

五、总结

Java 8的Stream和Lambda表达式是Java语言的重要特性,它们使得Java编程更加简洁和高效。通过本文的介绍和实战案例,相信你已经对这两个特性有了深入的了解。希望你在实际项目中能够灵活运用这些特性,提高代码质量和开发效率。

分享到: