教程中心 / Java教程 / Stream API

Stream API

18分钟 函数式编程

Stream API概述

Stream API是Java 8引入的重要特性,它提供了一种高效且简洁的方式来处理集合数据。Stream不是数据结构,而是一种数据处理的高层抽象。

重要概念:Stream不会改变原集合,它返回一个新的Stream或结果。

Stream处理流程

创建Stream
中间操作
终端操作

创建Stream

集合、数组、Stream.of()

中间操作

filter/map/sorted/distinct

终端操作

collect/forEach/reduce

创建Stream

 // 从集合创建
List<String> list = Arrays.asList("a", "b", "c");
Stream<String> stream = list.stream();

// 从数组创建
String[] array = {"x", "y", "z"};
Stream<String> stream2 = Arrays.stream(array);

// 直接创建
Stream<Integer> stream3 = Stream.of(1, 2, 3, 4, 5); 

中间操作

1. filter - 过滤

根据条件过滤元素:

 List<Integer> evens = numbers.stream()
    .filter(n -> n % 2 == 0)
    .collect(Collectors.toList()); 

2. map - 转换

将元素转换为另一种形式:

 List<String> upper = names.stream()
    .map(String::toUpperCase)
    .collect(Collectors.toList()); 

3. sorted - 排序

 List<Integer> sorted = numbers.stream()
    .sorted()
    .collect(Collectors.toList()); 

4. distinct - 去重

 List<Integer> unique = numbers.stream()
    .distinct()
    .collect(Collectors.toList()); 

终端操作

1. collect - 收集

将流转换为集合或字符串:

 // 收集为List
List<String> list = stream.collect(Collectors.toList());

// 收集为Set
Set<String> set = stream.collect(Collectors.toSet());

// 字符串连接
String joined = stream.collect(Collectors.joining(", ")); 

2. reduce - 聚合

 int sum = numbers.stream()
    .reduce(0, Integer::sum); 

3. forEach - 遍历

 stream.forEach(System.out::println); 

常用终端操作汇总

操作说明
collect()将流转换为集合或字符串
toList()/toSet()收集为List/Set
joining()连接为字符串
count()统计元素个数
sum()/average()求和/平均值
max()/min()最大/最小值
forEach()遍历每个元素
findFirst()返回第一个元素

小结

  • Stream是数据处理的高层抽象,不存储数据
  • Stream操作分为中间操作(返回Stream)和终端操作(返回结果)
  • 常用中间操作:filtermapsorteddistinct
  • 常用终端操作:collectforEachreducecount
  • Stream是惰性执行的,只有遇到终端操作才会真正执行
☕ Java 在线代码编辑器
📝 运行结果