栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Java 8 Stream API-是否有状态中间操作保证新的源集合?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java 8 Stream API-是否有状态中间操作保证新的源集合?

API文档没有这样的保证“后续操作将不再对后备集合进行操作”,因此,您永远不应依赖于特定实现的这种行为。

您的示例碰巧偶然地完成了所需的操作;甚至不能保证

List
创建的by
collect(Collectors.toList())
支持该
remove
操作。

展示一个反例

Set<Integer> set = IntStream.range(0, 10).boxed()    .collect(Collectors.toCollection(TreeSet::new));set.stream()    .filter(i -> i > 5)    .sorted()    .forEach(set::remove);

抛出一个

ConcurrentModificationException
。原因是实现已优化了此方案,因为源已被排序。原则上,它可以对原始示例进行相同的优化,就像
forEach
不按指定顺序显式执行操作一样,因此不需要排序。

还有其他可以想象的优化,例如

sorted().findFirst()
可以转换为“查找最小值”操作,而无需将元素复制到新存储中进行排序。

因此,最重要的是,当依赖于未指定的行为时,今天发生的事情可能会在明天添加新的优化措施而中断。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/429096.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号