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

分组Java8流而不收集它

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

分组Java8流而不收集它

无法使用标准Stream
API做到这一点。通常,您无法执行此操作,因为将来总是有可能出现属于任何已创建组的新项目,因此,在处理所有输入之前,您无法将组传递给下游分析。

但是,如果您事先知道要分组的项目在输入流中始终是相邻的,则可以使用增强Stream
API的第三方库来解决您的问题。StreamEx是此类库之一,它是我免费写的。它包含许多“部分归约”运算符,这些运算符根据某些谓词将相邻项折叠为单个。通常,您应该提供一个

BiPredicate
测试两个相邻项目的项目,如果将它们组合在一起,则返回true。下面列出了一些部分归约操作:

  • collapse(BiPredicate)
    :将每个组替换为该组的第一个元素。例如,
    collapse(Objects::equals)
    对于从流中删除相邻重复项很有用。
  • groupRuns(BiPredicate)
    :用组元素列表替换每个组(因此
    StreamEx<T>
    被转换为
    StreamEx<List<T>>
    )。例如,
    stringStream.groupRuns((a, b) -> a.charAt(0) == b.charAt(0))
    将创建字符串列表流,其中每个列表包含以相同字母开头的相邻字符串。

其他部分归约运算包括

intervalMap
runLengths()
等等。

所有部分还原操作都是惰性的,并行友好的并且非常有效。

请注意,您可以使用轻松

StreamEx
从常规Java
8流构造对象
StreamEx.of(stream)
。也有一些方法可以从数组,集合,读取器等构造它。
StreamEx
该类实现
Stream
接口,并且100%与标准Stream
API兼容。



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

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

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