Scala 是否可以在akkastreams中提取子流密钥?

Scala 是否可以在akkastreams中提取子流密钥?,scala,akka,akka-stream,Scala,Akka,Akka Stream,我似乎找不到这方面的任何文档,但我知道AkkaStreams在内存中存储了调用groupBy时用于将流分组到子流的键。是否可以从子流中提取这些关键点?假设我从我的主流创建了一组子流,将这些子流通过一个对子流中的对象进行计数的折叠,然后将计数存储在一个类中。我能把子流的键也传给那个类吗?还是有更好的方法?我需要对每个子流中的每个元素进行计数,但我还需要存储计数所属的组。下面显示了一个很好的示例: 然后是: val words = Source(List("Hello", &qu

我似乎找不到这方面的任何文档,但我知道AkkaStreams在内存中存储了调用groupBy时用于将流分组到子流的键。是否可以从子流中提取这些关键点?假设我从我的主流创建了一组子流,将这些子流通过一个对子流中的对象进行计数的折叠,然后将计数存储在一个类中。我能把子流的键也传给那个类吗?还是有更好的方法?我需要对每个子流中的每个元素进行计数,但我还需要存储计数所属的组。

下面显示了一个很好的示例:

然后是:

val words = Source(List("Hello", "world", "let's", "say", "again", "Hello", "world"))
counts.runWith(Sink.foreach(println))
将打印:

(world,2)
(Hello,2)
(let's,1)
(again,1)
(say,1)
(0,26)
(1,26)
(2,25)
(3,25)
我想到的另一个例子是用余数数数。因此,以下是一个例子:

Source(0 to 101)
  .groupBy(10, x => x % 4)
  .map(e => e % 4 -> 1)
  .reduce((l, r) => (l._1, l._2 + r._2))
  .mergeSubstreams.to(Sink.foreach(println)).run()
将打印:

(world,2)
(Hello,2)
(let's,1)
(again,1)
(say,1)
(0,26)
(1,26)
(2,25)
(3,25)

这个策略适合我的需要!但是,我需要两个异步执行此操作的管道。当我实现这一点时,出于某种原因,在将管道合并在一起之后,当应该有数千条管道时,我只得到了大约3条。如果我使用折叠,所有条目都会被输出,但有一半遗漏了键值。知道为什么会这样吗?@WolfDeWulf,不看你的代码就很难知道了。但是,每个SO问题应该只有一个问题。如果我的答案回答了您的问题,您可以接受它,并就您的非工作代码创建另一个问题。