Java Stream 怎么用

去超市买水果,你会不会先把坏果子挑出去,再把大小合适的装袋,最后数清楚一共多少斤?这种“一步步处理一堆东西”的小事,放到编程里,就像用Java Stream做的事。

很多新手写Java代码处理集合的时候,总习惯用循环:先把List里的每个元素拿出来判断,符合条件就放新列表,最后再计算数量。比如要统计员工里年龄超过30的人数,可能会写三四个循环,绕来绕去容易出错。而Stream就像给集合装了一条“流水线”,把这些步骤拆成一个个简单的环节,不用反复写循环。

Java Stream 怎么用

先搞懂Stream的基本用法:三步走完流水线

Stream的操作就像流水线的三个步骤,每一步都是单独的小任务,组合起来就能完成复杂的事。

第一步:打开流水线。你得先有一堆“原料”,比如员工列表,用stream()方法把它变成可处理的Stream,就像把水果倒进超市的分拣台。

第二步:中间处理。这是流水线的核心,都是对数据的加工,比如“挑出年龄超30的”“只取员工姓名”,这些操作不会直接出结果,只是把数据改得符合要求。比如filter(emp -> emp.getAge() > 30),就像分拣台把坏果子挑出去的动作。

第三步:收尾操作。这是流水线的终点,会把最终结果算出来,比如“数总人数”“把结果存到新列表里”。比如count()就是数个数,collect(Collectors.toList())就是把符合条件的元素存成新列表。

举个生活化的例子:你要给朋友送草莓,先把坏草莓挑出来(中间操作filter),再数够不够10颗(收尾操作count),如果够就打包(另一种收尾操作),整个过程用Stream只需要一行代码,不用反复写循环。

常见的实用场景,学会这几个就够用

Stream的用法不用记太多,日常开发里常用的就这几个,对应你平时可能遇到的需求:

第一个需求:筛选数据。比如你有一张全班同学的成绩表,要找出分数超过80分的同学。用循环的话要写判断语句,用Stream直接写students.stream().filter(s -> s.getScore() > 80).collect(Collectors.toList()),一眼就能看懂是“把分数超80的挑出来存成新列表”。

第二个需求:统计数据。比如要算所有同学的平均成绩,用mapToInt把同学对象转成分数数字,再用average()求平均值,一行代码就能搞定,比循环累加再除以人数简单多了。

第三个需求:合并或转换数据。比如你有两个员工列表,要把它们合并成一个,或者把员工对象转成只包含姓名的列表,用Stream的flatMap或者map方法,不用自己写循环合并,不容易出错。

新手要注意的小细节

Stream有个很重要的点:它是“一次性的”。就像你把水果倒进分拣台,分拣完的流水台不能再倒别的东西;如果要再处理,得重新从原集合生成新的Stream。如果试过一次之后再用,代码会报错,这是新手最容易踩的坑。

另外,中间操作都是“懒加载”的:你写了filter但没写收尾操作,这些步骤根本不会执行,就像分拣台的通道没打开,水果根本不会往前走。只有到了收尾步骤,整个流水线才会真正跑起来。

总结一下,Java Stream就是把循环的复杂步骤拆成简单的流水线,用易懂的方法处理集合数据,不用反复写重复的循环,代码更简洁,也不容易出错。平时多拿自己熟悉的场景试试,很快就能上手。

上一篇 Swift 编程语言的核心特性与主流应用场景科普解析