Java 转换集合流的内部元素

Java 转换集合流的内部元素,java,scala,akka-stream,Java,Scala,Akka Stream,我最近在业余时间学习使用Akka Streams(Scala和java),并想知道如何实现以下场景 我有一个非常大的集合的连续流进入我的管道,我想让管道转换每个集合中的元素 将一个集合转换为它的元素流很容易,但是我还需要将一个集合中所有转换的元素一起收集到一个新集合中(只包含以前也在原始集合中一起转换的对象)。因此,我必须知道1个集合的特定元素流何时被处理,因为这样我就可以发出转换后的集合,以便在常规管道中进行进一步处理。正如评论员所建议的,您可以在转换管道中使用折叠来组装列表类型的元素。要在运

我最近在业余时间学习使用Akka Streams(Scala和java),并想知道如何实现以下场景

我有一个非常大的集合的连续流进入我的管道,我想让管道转换每个集合中的元素


将一个集合转换为它的元素流很容易,但是我还需要将一个集合中所有转换的元素一起收集到一个新集合中(只包含以前也在原始集合中一起转换的对象)。因此,我必须知道1个集合的特定元素流何时被处理,因为这样我就可以发出转换后的集合,以便在常规管道中进行进一步处理。

正如评论员所建议的,您可以在
转换管道中使用
折叠
来组装列表类型的元素。要在运行流时维护列表边界,请使用
flatMapConcat
,而不是
mapcont
,如以下简化示例所示:

def transform(s: String): Int = s.length

val transformationPipeline: Flow[String, List[Int], NotUsed] = Flow[String].
  fold(List.empty[Int])((ls, s) => transform(s) :: ls).
  map(_.reverse)

val flow: Flow[List[String], List[Int], NotUsed] = Flow[List[String]].
  flatMapConcat(Source(_).via(transformationPipeline))

Source(List("a", "bb") :: List("cc", "ddd", "e") :: Nil).
  via(flow).
  runForeach(println)
// List(1, 2)
// List(2, 3, 1)

你可以用fold。您可以包含一些代码来处理itI,我知道fold能够从元素流创建一个新集合,但由于我有一个集合流,我正在不断地将其转换为每个集合的元素流,我不确定何时停止“折叠”防止下一个集合中的元素也折叠到当前集合中。我将尝试在我的帖子中添加一些伪代码。我不确定我是否遵循了。如果
transform
将单个
CustomObject
转换为单个
TransformedCustomObject
transformationPipeline
如何从单个
CustomObject
多个
TransformedCustomObject
s创建?要么是1:1映射,要么是1对多映射。