Java流API—是否可以创建一个收集器,将结果收集到一个新流?

Java流API—是否可以创建一个收集器,将结果收集到一个新流?,java,functional-programming,java-stream,Java,Functional Programming,Java Stream,所以,这个问题是不言自明的:有没有一种方法可以创建一个收集器,即收集传递给它的流,并将其转换成一个新的流 我知道这可以通过一些技巧来实现,比如: Collectors.collecting和thencollectors.toList,List::stream 但该代码分配冗余内存 解释为什么我首先需要这个:有时我想将一些东西传递给Collectors.groupingBy,然后在下游执行流操作,而不需要额外的时间来收集它 有没有一种简单的方法可以不用编写自己的类来实现收集器接口 编辑:这个问题已

所以,这个问题是不言自明的:有没有一种方法可以创建一个收集器,即收集传递给它的流,并将其转换成一个新的流

我知道这可以通过一些技巧来实现,比如:

Collectors.collecting和thencollectors.toList,List::stream

但该代码分配冗余内存

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

有没有一种简单的方法可以不用编写自己的类来实现收集器接口


编辑:这个问题已被标记为问题的副本,但这不是我要找的。我不想复制原始流,我想关闭它并生成一个新流,该流由相同的元素组成,顺序相同,使用收集器,中间不分配内存。

collect方法将接受收集器

收集器的组成部分如下所示

供应商-例如,对于流,它可以是stream.empty 累加器-对于流,我们可以使用Stream.concat 组合器-因为这需要一个BinaryOperator,您需要处理第一个元素,因为它将是引用。例如,对于列表,您得到l1和l2,通常执行l1.addAlll2 因此,除了非常复杂之外,内存分配方面的开销将比首先收集集合中的所有内容更大

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


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

collector将流收集到一个集合中。在集合之前,它始终是一个流。如果您仍然想使用流,为什么要收集它?也许我没有理解你所说的更深层次的东西,但是在我看来,你想收集你的流,然后再次流。当我将收集器传递到另一个收集器(例如Collectors.groupingBy)时,我在问题中描述的构造很有用,因此,它将在另一个流上运行。