Stream-常见方法(上)
常见方法
流模型的操作很丰富 这里介绍一些常用的API 这些方法可以被分成两种:
- 延迟方法:返回值类型仍然是Stream接口自身类型的方法 因此支持链式调用(除了终结方法外 其余方法均为延迟方法。)
- 终结方法:返回值类型不再是Stream接口自身类型的方法 因此不再支持类似StringBuilder那样的链式调用 本小节种 终结方法包括count和forEach方法
逐一处理:forEach
虽然方法名字叫forEach 但是与for循环中的for-each昵称不同
void forEach(Consumer<? super T> action);
该方法接收一个Consumer接口函数 会将一个流元素交给该函数进行处理
复习Consumer接口
java.util.function.Consumer<T>接口是一个消费型接口
Consumer接口中包含抽象方法void accept(T t),意为消费一个指定泛型的数据
代码:
/* forEach方法 用来遍历流中的数据 是一个终结方法 遍历之后不能继续调用Stream流中的其他方法 */ public static void main(String[] args) { Stream<String> s = Stream.of("张三", "李四", "王五", "赵六"); /*s.forEach((String s1)->{ System.out.println(s1); });*/ //优化lambda s.forEach(s1 -> System.out.println(s1)); }
过滤:filter
可以通过filter方法将一个流转换成另一个字集流 方法签名:
Stream<T> filter(Perdicate<? super T> predicate);
该接口接收一个Predicate函数式接口参数(可以是一个Lambda或方法引用)作为筛选条件
public static void main(String[] args) { //创建一个Stream流 Stream<String> stream = Stream.of("张三", "李四", "张器"); //对Stream流中的元素进行过滤 只要姓张的人 Stream<String> stream1 = stream.filter((String name) -> { return name.startsWith("张"); }); //遍历stream1 stream1.forEach(name -> System.out.println(name)); }
运行结果:
Stream流使用特点
Stream流属于管道流 只能被消费(使用)一次
第一个Stream流调用完毕方法 数据就会流转到下一个Stream上
而这时第一个Stream流已经使用完毕 就关闭了
所以第一个Stream流不能再调用方法了
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)