什么是 Stream

Stream 是对集合对象功能的增强,它不是集合,也不存储数据,而是从集合中抽象出一条数据通道,让你可以用链式方式一步步处理数据。

🔧 常见操作分类

类型 方法举例
创建 stream(), Stream.of(), Arrays.stream()
中间操作 filter(), map(), sorted(), limit(), distinct()
终结操作 collect(), forEach(), count(), reduce()

🔍 常用示例

1️⃣ 过滤 filter

复制代码
List<String> names = Arrays.asList("Tom", "Jerry", "Tim");
names.stream()
     .filter(name -> name.startsWith("T"))
     .forEach(System.out::println);  // 输出 Tom, Tim

2️⃣ 映射 map

java 复制代码
List<String> names = Arrays.asList("tom", "jerry");
List<String> upper = names.stream()
                          .map(String::toUpperCase)
                          .collect(Collectors.toList()); // [TOM, JERRY]

3️⃣ 排序 sorted

java 复制代码
List<Integer> nums = Arrays.asList(5, 2, 9);
List<Integer> sorted = nums.stream()
                           .sorted()
                           .collect(Collectors.toList()); // [2, 5, 9]

4️⃣ 去重 distinct

java 复制代码
List<Integer> nums = Arrays.asList(1, 2, 2, 3);
List<Integer> unique = nums.stream()
                           .distinct()
                           .collect(Collectors.toList()); // [1, 2, 3]

5️⃣ 统计 count / max / min

java 复制代码
long count = names.stream()
                  .filter(name -> name.length() > 3)
                  .count();

Optional<String> longest = names.stream()
                                .max(Comparator.comparingInt(String::length));

6️⃣ 规约 reduce

java 复制代码
int sum = Arrays.asList(1, 2, 3, 4)
                .stream()
                .reduce(0, (a, b) -> a + b); // 10

7️⃣ 分组 groupingBy

java 复制代码
List<String> items = Arrays.asList("apple", "banana", "apple", "orange");
Map<String, Long> result = items.stream()
    .collect(Collectors.groupingBy(Function.identity(), Collectors.counting()));
// 输出: {banana=1, orange=1, apple=2}

⛓️ 链式调用示例:综合使用

java 复制代码
List<String> result = Arrays.asList("apple", "banana", "cherry", "date")
    .stream()
    .filter(s -> s.length() > 5)
    .map(String::toUpperCase)
    .sorted()
    .collect(Collectors.toList());
// 输出: [BANANA, CHERRY]
相关推荐
wuminyu2 小时前
专家视角看Java字节码加载与存储指令机制
java·linux·c语言·jvm·c++
callJJ4 小时前
Spring Data Redis 两种编程模型详解:同步 vs 响应式
java·spring boot·redis·python·spring
wbs_scy4 小时前
Linux线程同步与互斥(三):线程同步深度解析之POSIX 信号量与环形队列生产者消费者模型,从原理到源码彻底吃透
java·开发语言
jinanwuhuaguo6 小时前
(第三十三篇)五月的文明奠基:OpenClaw 2026.5.2版本的文明级解读
android·java·开发语言·人工智能·github·拓扑学·openclaw
xmjd msup6 小时前
spring security 超详细使用教程(接入springboot、前后端分离)
java·spring boot·spring
952367 小时前
SpringBoot统一功能处理
java·spring boot·后端
Lyyaoo.7 小时前
优惠券秒杀业务分析
java·开发语言
消失的旧时光-19437 小时前
统一并发模型:线程、Reactor、协程本质是一件事(从线程到协程 · 第6篇·终章)
java·python·算法
勿忘初心12217 小时前
Java 国密 SM4 加密工具类实战(Hutool + BouncyCastle)|企业级数据加密 + 兼容 JDK8
java·数据安全·数据加密·后端开发·企业级开发·国密 sm4
庞轩px7 小时前
第8篇:原子类与CAS底层原理——无锁并发的实现
java·cas·乐观锁·aba·无锁编程·自旋