您的当前位置:首页正文

Java 8 新特性:集合 Stream 流及其用法

来源:个人技术集锦

Java 8 新特性:集合 Stream 流及其用法

在 Java 8 中,引入了一个非常强大的新特性——Stream 流。Stream 提供了一种高效且优雅的方式来处理集合数据,支持对数据进行顺序和并行操作。本文将介绍 Stream 的基本概念、常用操作及其用法。

什么是 Stream?

Stream 是一种对集合对象进行操作的抽象方式,允许我们以声明性的方法处理数据。与传统的集合不同,Stream 不会存储数据,它只是对数据源(如集合、数组)进行计算的视图。Stream 可以是顺序的,也可以是并行的,这使得它在处理大量数据时非常高效。

Stream 的特点

Stream 的创建

可以通过以下几种方式创建 Stream:

  1. 从集合创建

    List<String> list = Arrays.asList("a", "b", "c", "d");
    Stream<String> stream = list.stream();
    
  2. 从数组创建

    String[] array = {"a", "b", "c", "d"};
    Stream<String> streamFromArray = Arrays.stream(array);
    
  3. 使用 Stream.of()

    Stream<String> streamOf = Stream.of("a", "b", "c", "d");
    
  4. 使用生成器

    Stream<Integer> infiniteStream = Stream.iterate(0, n -> n + 1);
    

常用操作

Stream 提供了一系列强大的操作,主要分为两类:中间操作和终端操作。

中间操作

中间操作返回一个新的 Stream,通常是惰性执行的,常见的中间操作有:

  • filter:过滤数据

    List<String> filtered = list.stream()
        .filter(s -> s.startsWith("a"))
        .collect(Collectors.toList());
    
  • map:对每个元素进行转换

    List<String> uppercased = list.stream()
        .map(String::toUpperCase)
        .collect(Collectors.toList());
    
  • sorted:对数据排序

    List<String> sorted = list.stream()
        .sorted()
        .collect(Collectors.toList());
    

终端操作

终端操作触发实际的计算并产生结果,常见的终端操作有:

  • collect:将结果收集到集合中

    List<String> result = list.stream().collect(Collectors.toList());
    
  • forEach:对每个元素执行操作

    list.stream().forEach(System.out::println);
    
  • reduce:聚合操作

    Optional<String> concatenated = list.stream()
        .reduce((s1, s2) -> s1 + s2);
    
  • count:计算元素数量

    long count = list.stream().count();
    

使用示例

以下是一个完整的示例,演示如何使用 Stream 来处理集合数据:

import java.util.*;
import java.util.stream.*;

public class StreamExample {
    public static void main(String[] args) {
        List<String> list = Arrays.asList("apple", "banana", "cherry", "date", "elderberry");

        // 过滤以 'a' 开头的单词并转换为大写
        List<String> result = list.stream()
            .filter(s -> s.startsWith("a"))
            .map(String::toUpperCase)
            .sorted()
            .collect(Collectors.toList());

        // 输出结果
        result.forEach(System.out::println);
    }
}

总结

Java 8 的 Stream 流特性为集合操作提供了更加灵活和强大的方式。通过函数式编程的风格,可以以更加简洁、可读的方式来处理数据。掌握 Stream 的使用,可以大大提高你的 Java 编程效率。希望这篇文章能帮助你更好地理解和应用 Java 8 的 Stream 流特性!

因篇幅问题不能全部显示,请点此查看更多更全内容