零基础入门,带你搞懂Java Stream流
2026/9/1 4:58:41 网站建设 项目流程

一、获取Stream流(创建流)

来源方法说明
Collection集合list.stream()获取集合的串行流(最常用)
Collection集合list.parallelStream()获取并行流,多线程处理
数组Arrays.stream(数组)/Stream.of(数组)数组转流
多个零散值Stream.of(T... values)直接传入多个对象生成流

二、中间操作(返回Stream对象,链式调用,延迟执行,不会真正执行

中间操作做完只是记录操作,必须调用终结方法才会真正跑逻辑

方法函数式接口作用简单示例
filter()Predicate<T>过滤,保留满足条件元素.filter(s‑>s.length()>3)
map()Function<T,R>一对一转换,把元素转为另一种类型.map(s‑>s.length())
distinct()去重,依赖equals()hashCode().distinct()
sorted()Comparator<T>排序;无参使用自然排序,传Comparator自定义规则.sorted((a,b)->b‑a)
limit(long n)截取流前n个元素.limit(3)
skip(long n)跳过前n个元素,取后面.skip(2)
flatMap()Function<T,Stream<R>>扁平化,拆分层级集合(一对多).flatMap(c‑>c.stream())

三、终结操作(触发真正执行,关闭流,流不能再继续使用)

方法返回值类型作用示例
forEach()void遍历流中每一个元素,执行消费逻辑.forEach(System.out::println)
count()long统计流中元素数量.count()
collect()R收集,把流转回集合(List/Set/Map).collect(Collectors.toList())
max(comparator)Optional<T>获取最大值.max(Integer::compareTo)
min(comparator)Optional<T>获取最小值.min(Integer::compareTo)
anyMatch()boolean任意一个匹配返回true(短路).anyMatch(s‑>s.contains("a"))
allMatch()boolean全部元素匹配返回true.allMatch(s‑>s.length()>1)
noneMatch()boolean全部都不匹配返回true.noneMatch(Objects::isNull)
findFirst()Optional<T>获取流中第一个元素.findFirst()
findAny()Optional<T>获取流中任意一个(并行流性能好).findAny()
reduce()Optional<T>/T归约、聚合计算(求和、求乘积).reduce(0,Integer::sum)

四、课程重点注意事项(面试高频)

  1. 流只能使用一次:执行完终结操作,流直接关闭,再次调用方法抛出IllegalStateException
  2. 中间操作是延迟执行,写一堆filter/map不会运行代码,必须调用终结方法才执行
  3. distinct()去重依赖对象的equals()hashCode(),自定义对象需要重写这两个方法。
  4. 不要在Stream操作中修改原始集合中的元素(会产生并发修改异常)。
  5. collect(Collectors.toList())是开发最常用的收集方法,把流变回List集合。

最简完整示例(课程demo风格)

List<String> list = Arrays.asList("张三","李四","张三丰","王五"); List<String> res = list.stream() .filter(s‑>s.length()>2) //中间:过滤 .map(String::toUpperCase) //中间:转换 .limit(2) //中间:截取 .collect(Collectors.toList()); //终结:收集 System.out.println(res);

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询