Stream,流,理解为集合的操作类
一、特点
1.不存储数据
2.不改变源集合
3.惰性求值 (在满足条件之后,进行一次迭代,得到要求的值)
二、创建方式
1.Stream.of() 、Stream.empty()、Stream.generate()、Stream.iterate()方法
2.Arrays.stream()方法
3.Collection.stream()方法
三、例子
List<Integer> list = new ArrayList<>(10);
for (int i = 0; i < 100 ; i++) {
list.add(i);
}
// 1.筛选切片
list.stream()
.filter(t -> t > 4) // 通过Predicate 断言,过滤元素, 返回流
.distinct() // 去重,返回流
.limit(20) // 截取限制操作,只取指定个数,返回流
.skip(3) // 跳过操作,去之后的元素,返回流
.forEach(t -> System.out.println(t)); // 遍历操作
// 2.映射
list.stream()
.map(t -> String.valueOf(t) + 1) // 转化操作,根据参数T,转化成R类型,返回结果仍然是流
.flatMap(t -> list.stream()) // 转化操作,根据参数T,转化成R类型流,这里会生成多个R类型流,返回结果仍然是流
.forEach(t -> System.out.println(t));
// 3.匹配
// 任意一个匹配
System.out.println(list.stream().anyMatch(t -> t > 50));
// 完全匹配
System.out.println(list.stream().allMatch(t -> t > 50));
// 完全不匹配
System.out.println(list.stream().noneMatch(t -> t < -1));
// 4.查找
// 查询当前流中的任意元素
Optional<Integer> element = list.stream().findAny();
System.out.println(element.get());
// 查询当前流中的第一个元素
element = list.stream().findFirst();
System.out.println(element.get());
// 5.规约 ?? reduce
// 6.统计
// 最大值 (返回Optional)
System.out.println(list.stream().max((t1, t2) -> {
if (t1 > t2) {
return 1;
}
if (t1 < t2) {
return -1;
}
return 0;
}));
// 最小值(返回Optional)
System.out.println(list.stream().min((t1, t2) -> {
if (t1 > t2) {
return 1;
}
if (t1 < t2) {
return -1;
}
return 0;
}));
// 总数
System.out.println(list.stream().count());
// 汇总操作 (常与Collectors工具类一起使用)
list.stream().filter(t->t>60)
.collect(Collectors.toList())
.forEach(t-> System.out.println(t));
本文深入探讨Java Stream API的核心概念,展示如何通过流操作高效处理集合数据,包括筛选、映射、匹配、查找、规约、统计等实用功能,旨在帮助开发者掌握这一强大的功能。
1109

被折叠的 条评论
为什么被折叠?



