[特殊字符] Java Stream流:让集合处理变得如此优雅!

大家好!今天我们来聊一个超级实用的话题:Java Stream流。别被这个名字吓到,它其实就是一个让我们处理数据更轻松的"魔法工具"!

什么是Stream流?

简单来说,Stream流就像是一条传送带,我们可以把数据放在上面,然后对它们进行各种操作。比如筛选、排序、转换等等,就像在美食工厂的流水线上一样!

为什么要用Stream流?

  1. 代码更简洁(再见了,又臭又长的for循环!)
  1. 可读性更强(像说人话一样写代码)
  1. 支持并行处理(速度杠杠的!)

来看几个实际例子

1. 基础过滤 - 找出所有及格的分数

List scores = Arrays.asList(59, 85, 90, 45, 70, 95, 60);

// 老方法
List passScores = new ArrayList<>();
for(Integer score : scores) {
    if(score >= 60) {
        passScores.add(score);
    }
}

// 使用Stream(看看多简单!)
List passScores = scores.stream()
    .filter(score -> score >= 60)
    .collect(Collectors.toList());

2. 变形魔法 - 把名字都变成大写

List names = Arrays.asList("alice", "bob", "charlie");

// Stream一行搞定!✨
List upperNames = names.stream()
    .map(String::toUpperCase)
    .collect(Collectors.toList());
// 结果:[ALICE, BOB, CHARLIE]

3. 数据统计 - 计算平均分

List scores = Arrays.asList(88, 95, 75, 85, 90);

// 一行代码搞定平均分!
double average = scores.stream()
    .mapToInt(Integer::intValue)
    .average()
    .orElse(0.0);

4. 终极连招 - 复杂操作组合

List students = Arrays.asList(
    new Student("小明", 85),
    new Student("小红", 95),
    new Student("小张", 59),
    new Student("小李", 78)
);

// 找出分数大于60分的学生名字,并按字母排序
List passStudents = students.stream()
    .filter(s -> s.getScore() >= 60)     // 筛选及格的
    .map(Student::getName)                // 提取名字
    .sorted()                            // 排序
    .collect(Collectors.toList());       // 收集结果

Stream流的常用操作

  • filter() - 筛选数据(就像过滤器)
  • map() - 转换数据(变形金刚)
  • sorted() - 排序(整整齐齐)
  • collect() - 收集结果(最后一步)
  • count() - 计数
  • forEach() - 遍历每个元素

小贴士

  1. Stream用完就关,不能重复使用
  1. Stream不会修改原始数据
  1. 惰性求值:中间操作不会立即执行,直到遇到终端操作

总结

Stream流就像是集合处理的瑞士军刀,掌握了它,代码立刻变得简洁优雅!不用再写一堆又臭又长的for循环了,让代码可读性蹭蹭往上涨!

记住:Stream流不是什么高深的概念,它就是让你的代码更漂亮、更容易理解的好帮手!开始使用Stream,让你的Java代码焕然一新吧!✨

你学会了吗?快去试试吧!如果有任何问题,欢迎在评论区讨论!

你可能感兴趣的:(java,stream,java集合)