Java 集合 Stream 操作

🧩 基础示例

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

public class StreamDemo {
    public static void main(String[] args) {
        List<String> names = Arrays.asList("Alice", "Bob", "Charlie", "David", "Eve");

        // 1. 过滤(filter)
        List<String> filtered = names.stream()
                .filter(name -> name.length() > 3)
                .collect(Collectors.toList());
        System.out.println("过滤长度>3: " + filtered);

        // 2. 映射(map)
        List<Integer> lengths = names.stream()
                .map(String::length)
                .collect(Collectors.toList());
        System.out.println("名字长度: " + lengths);

        // 3. 排序(sorted)
        List<String> sorted = names.stream()
                .sorted()
                .collect(Collectors.toList());
        System.out.println("按字母排序: " + sorted);

        // 4. 去重(distinct)
        List<String> withDuplicates = Arrays.asList("Alice", "Bob", "Alice", "David");
        List<String> distinct = withDuplicates.stream()
                .distinct()
                .collect(Collectors.toList());
        System.out.println("去重后: " + distinct);

        // 5. 限制与跳过(limit, skip)
        List<String> limited = names.stream()
                .skip(1)
                .limit(3)
                .collect(Collectors.toList());
        System.out.println("跳过1个取3个: " + limited);
    }
}

⚙️ 进阶操作

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

public class StreamAdvancedDemo {
    public static void main(String[] args) {
        List<Integer> numbers = Arrays.asList(3, 6, 2, 8, 3, 9, 2);

        // 1. 聚合操作
        int sum = numbers.stream().mapToInt(Integer::intValue).sum();
        double average = numbers.stream().mapToInt(Integer::intValue).average().orElse(0);
        int max = numbers.stream().mapToInt(Integer::intValue).max().orElse(0);
        System.out.println("Sum=" + sum + ", Avg=" + average + ", Max=" + max);

        // 2. 分组(groupingBy)
        Map<Integer, List<Integer>> groupByMod = numbers.stream()
                .collect(Collectors.groupingBy(n -> n % 2));
        System.out.println("按奇偶分组: " + groupByMod);

        // 3. 统计信息(summaryStatistics)
        IntSummaryStatistics stats = numbers.stream().mapToInt(Integer::intValue).summaryStatistics();
        System.out.println("统计信息: " + stats);

        // 4. 拼接字符串(joining)
        List<String> words = Arrays.asList("Java", "Stream", "API");
        String joined = words.stream().collect(Collectors.joining(" - "));
        System.out.println("拼接结果: " + joined);

        // 5. flatMap(扁平化)
        List<List<Integer>> listOfLists = Arrays.asList(
                Arrays.asList(1, 2, 3),
                Arrays.asList(4, 5),
                Arrays.asList(6, 7, 8)
        );
        List<Integer> flattened = listOfLists.stream()
                .flatMap(List::stream)
                .collect(Collectors.toList());
        System.out.println("扁平化结果: " + flattened);
    }
}

🧠 总结:常见 Stream 操作

操作 含义 示例
filter() 过滤元素 stream.filter(x -> x > 10)
map() 转换类型或属性 stream.map(String::length)
flatMap() 扁平化嵌套集合 stream.flatMap(List::stream)
sorted() 排序 stream.sorted()
distinct() 去重 stream.distinct()
limit() / skip() 限制数量 / 跳过元素 stream.limit(5)
collect() 收集结果 Collectors.toList()Collectors.toMap()
groupingBy() 按规则分组 Collectors.groupingBy(...)
reduce() 累积计算 stream.reduce(0, Integer::sum)
forEach() 遍历执行操作 stream.forEach(System.out::println)

Java 集合 Stream 操作
https://liuyuhe666.github.io/2025/11/06/Java-集合-Stream-操作/
作者
Liu Yuhe
发布于
2025年11月6日
许可协议