
一、获取Stream流创建流来源方法说明Collection集合list.stream()获取集合的串行流最常用Collection集合list.parallelStream()获取并行流多线程处理数组Arrays.stream(数组)/Stream.of(数组)数组转流多个零散值Stream.of(T... values)直接传入多个对象生成流二、中间操作返回Stream对象链式调用延迟执行不会真正执行中间操作做完只是记录操作必须调用终结方法才会真正跑逻辑。方法函数式接口作用简单示例filter()PredicateT过滤保留满足条件元素.filter(s‑s.length()3)map()FunctionT,R一对一转换把元素转为另一种类型.map(s‑s.length())distinct()‑去重依赖equals()、hashCode().distinct()sorted()ComparatorT排序无参使用自然排序传Comparator自定义规则.sorted((a,b)-b‑a)limit(long n)‑截取流前n个元素.limit(3)skip(long n)‑跳过前n个元素取后面.skip(2)flatMap()FunctionT,StreamR扁平化拆分层级集合一对多.flatMap(c‑c.stream())三、终结操作触发真正执行关闭流流不能再继续使用方法返回值类型作用示例forEach()void遍历流中每一个元素执行消费逻辑.forEach(System.out::println)count()long统计流中元素数量.count()collect()R收集把流转回集合List/Set/Map.collect(Collectors.toList())max(comparator)OptionalT获取最大值.max(Integer::compareTo)min(comparator)OptionalT获取最小值.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()OptionalT获取流中第一个元素.findFirst()findAny()OptionalT获取流中任意一个并行流性能好.findAny()reduce()OptionalT/T归约、聚合计算求和、求乘积.reduce(0,Integer::sum)四、课程重点注意事项面试高频流只能使用一次执行完终结操作流直接关闭再次调用方法抛出IllegalStateException。中间操作是延迟执行写一堆filter/map不会运行代码必须调用终结方法才执行。distinct()去重依赖对象的equals()和hashCode()自定义对象需要重写这两个方法。不要在Stream操作中修改原始集合中的元素会产生并发修改异常。collect(Collectors.toList())是开发最常用的收集方法把流变回List集合。最简完整示例课程demo风格ListString list Arrays.asList(张三,李四,张三丰,王五); ListString res list.stream() .filter(s‑s.length()2) //中间过滤 .map(String::toUpperCase) //中间转换 .limit(2) //中间截取 .collect(Collectors.toList()); //终结收集 System.out.println(res);