繁体   English   中英

Java Stream API - 是否可以创建收集器,将结果收集到新的 ZF7B4549819?

[英]Java Stream API - is it possible to create Collector that is collecting result to a new stream?

所以,这个问题是不言自明的:有没有办法创建一个收集器,即收集传递给它的 stream 到一个新的 stream 中?

我知道它可以通过一些技巧来完成,例如:

Collectors.collectingAndThen(Collectors.toList(), List::stream);

但是这段代码分配了冗余的 memory。

解释为什么我首先需要这个:有时我想将一些东西传递给Collectors.groupingBy然后在下游执行stream操作,而不需要额外的时间。

有没有一种简单的方法(无需编写我自己的 class 实现收集器接口)?

编辑:这个问题已被标记为这个问题的副本,但这不是我要找的。 我不想复制原来的 stream,我想关闭它并生成一个新的 stream,它由相同顺序的相同元素组成,通过 Collector 的方式,而不在两者之间分配 ZCD69B4957F06CD818D7ZBF3D691。

collect 方法将接受一个收集器。

部分采集器如下

  • 供应商 - 对于 stream,它可以是Stream.empty()例如
  • 累加器 - 对于流,我们可以使用Stream.concat()
  • 组合器 - 因为这需要一个BinaryOperator并且您需要处理第一个元素,因为它将是参考。 例如,对于列表,您得到l1l2并且通常执行l1.addAll(l2)

因此,除了非常复杂之外,memory 分配的开销将比首先收集集合中的所有内容要大。

一切皆有可能,但是,您可能需要编写自己的收集器来满足您的需求。

你甚至可以重写与groupingBy相同的收集器,但这真的值得吗?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM