Stream流
(1)作用:
结合了Lambda表达式,简化集合、数组的操作
(2)使用步骤:
1.先得到一条Stream流(流水线),并把数据放上去;
单列集合: list.stream().forEach(s->System.out.println(s));
双列集合:
获取key:
hm.keySet().stream().forEach(s->System.out.println(s));
获取对象:
hm.entrySet().stream().forEach(s->System.out.println(s));
数组:
Array.stream(arr).forEach(s->System.out.println(s));
一堆零散数据:
Stream.of(数据).forEach(s->System.out.println(s));
注意:数据类型可以是基本数据类型,也可以是引用数据类型,但是数据类型要一致。
Stream接口中静态方法of的细节
方法的形参是一个可变参数,可以传递一堆零散的数据,也可以传递数组
但是数组必须是引用数据类型的,如果传递基本数据类型,是会把整个数组当做一个元素,放到Stream流中,返回得到的是地址值。
2.利用Stream流中的API进行各种操作
过滤、转换(中间方法)-------方法调用完后,还可以调用其他方法
注意:
1.中间方法,返回新的Stream流,原来的Stream流只能使用一次,建议使用链式编程
2.修改Stream流中的数据,不会影响原来集合或者数组中的数据
limit———获取前几个元素
skip———跳过前几个元素
当和并两个流时,若两个类的数据类型不一致,则将合并后的类变成它们的父类,此时便不能使用子类的特有方法,所以建议合并相同的类。
Stream.concat(list1.stream(),list2.stream());
统计、打印(终结方法)-------最后一步,调用完后不能调用其他方法
toArray():
String[ ] arr2=list.stream().toArray(value->new String[value]);
//value为数据流中数据的个数
System.out.println(Arrays.toString(arr));
collect:
1.收集到List集合中:
list.stream.中间方法.collect(Collectors.toList());
2.收集到Set集合中:
list.stream.中间方法.collect(Collectors.toSet());
3.收集到Map集合中:
toMap:
参数一表示键的生成规则
参数二表示值的生成规则
参数一:
Function泛型一:表示流中每一个数据的类型
泛型二:表示Map集合中键的数据类型
方法apply形参:依次表示流里面的每一个数据
方法体:生成键的代码
返回值:已经生成的键
Function泛型一:表示流中每一个数据的类型
泛型二:表示Map集合中值的数据类型
方法apply形参:依次表示流里面的每一个数据
方法体:生成值的代码
返回值:已经生成的值
注意点:如果要收集到Map集合当中,键不能重复,否则会报错。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
· 【译】Visual Studio 中新的强大生产力特性
· 2025年我用 Compose 写了一个 Todo App