Java8新特性之流stream

本文深入解析Java8中的Stream API,介绍其基本概念、特性及操作方式,通过实例演示如何利用流处理数据集合,包括过滤、映射、排序、分组等高级迭代功能,提升代码效率与可读性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

《Java 8 实战》学习笔记系列

定义

流是Java API的新成员,它允许你以声明性方式处理数据集合,可以把它看成遍历数据集的高级迭代器

示例

List<String> threeHighCaloricDishNames =
	menu.stream()//从menu获得流
		.filter(d -> d.getCalories() > 300)//选出高热量的菜
			.map(Dish::getName)//获取菜名
				.limit(3)//只选3个菜
					.collect(toList());//将结果保存在新的list中返回

组成

1.元素序列
接口,访问特定数据源,如集合
2.源
提供数据,如集合、数组、IO资源
3.数据处理操作
filter、map、reduce、find、match、sort等

特点

1.流水线
很多流操作本身会返回一个流,这样多个操作就可以链接起来,形成一个大的流水线
2.内部迭代
Collection是外部迭代
Stream是内部迭代
3.只能遍历消费一次
和迭代器类似,流只能遍历一次。遍历完之后,我们就说这个流已经被消费掉了。

stream 流操作

数据源

执行查询集合、数组、IO数据

中间操作

形成流水线
1.filter 谓词筛选,返回Stream,操作参数Predicate,T -> boolean
2.map 映射,返回Stream,操作参数Function<T,R>,T -> R
细分
2.1 map + Arrays.stream() 将每个数组分别转化为流
2.2 flatMap + Arrays.stream() 将多个数组分别转化为单个流
2.3 mapToIn,返回IntStream
3.limit 截断流,返回Stream
4.skip 跳过元素
5.sorted 可配合reversed,返回Stream,操作参数Comparator,(T, T) -> int
6.distinct 筛选各异的元素。可替换为在终端操作时,使用toSet()去除重复元素,返回Stream
7.range 范围
8.boxed 包装类

终端操作
生成结果

forEach 消费流中的每个元素并对其应用 Lambda。这一操作返回 void
count 返回流中元素的个数。这一操作返回 long
sum 求和
noneMatch 不匹配
collect 把流归约成一个集合,比如 List、 Map、Set 甚至是 Integer
groupingBy 分组
partitioningBy 分区,谓词返回bool
Collectors.toList() 转换
Collectors.counting() 可直接一起换成count
maxBy 最大值
summingInt 汇总
averagingInt 平均数

summarizingInt 返回一个IntSummaryStatistics对象

包括
count
sum
min
max
average

joining 连接字符串
reducing

查找和匹配

anyMatch 流中是否有一个元素匹配谓词
menu.stream().anyMatch(Dish::isVegetarian)
allMatch 流中是否全部元素匹配谓词
menu.stream().allMatch(d -> d.getCalories() < 1000)
noneMatch 流中是否没有元素匹配谓词
menu.stream().noneMatch(d -> d.getCalories() >= 1000)
findAny 找到结果时短路,立即结束
ifPresent 是否包含,如果包含可以执行代码块内容
findFirst 查找第一个
reduce 归约,例如计算求和累加、累乘、最大最小值等,代替for

并行流

parallel() 顺序流转换为并行流
parallelStream

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值