首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Akka流的物化价值

Akka流的物化价值
EN

Stack Overflow用户
提问于 2020-08-16 05:24:43
回答 1查看 119关注 0票数 0

我想引用流中的物化值。下面是代码片段,但它没有编译,错误:

代码语言:javascript
复制
type mismatch;
 found   : (akka.NotUsed, scala.concurrent.Future[akka.Done])
 required: (Playground.DomainObj, scala.concurrent.Future[akka.Done])

代码:

代码语言:javascript
复制
import akka.actor.ActorSystem
import akka.stream.scaladsl._
import scala.concurrent.Future
import akka.NotUsed
import akka.Done

implicit val actorSystem = ActorSystem("example")

case class DomainObj(name: String, age: Int)

 val customFlow1:Flow[String,DomainObj,NotUsed] = Flow[String].map(s => {
    DomainObj(s, 50)
  })

  val customFlow2 = Flow[DomainObj].map(s => {
    s.age + 10
  })

val printAnySink: Sink[Any, Future[Done]] = Sink.foreach(println)

val c1 = Source.single("John").viaMat(customFlow1)(Keep.right).viaMat(customFlow2)(Keep.left).toMat(printAnySink)(Keep.both)

val res: (DomainObj, Future[Done]) = c1.run()

在playground中找到代码:https://scastie.scala-lang.org/P9iSx49cQcaOZfKtVCzTPA

我想在流完成后引用DomainObj /

EN

回答 1

Stack Overflow用户

发布于 2020-08-16 06:46:04

Flow[String, DomainObj, NotUsed]的物化值是NotUsed,而不是DomainObj,因此c1的物化值是(NotUsed, Future[Done])

看起来这里的目的是捕获在customFlow1中创建的DomainObj。这可以通过以下方式完成

代码语言:javascript
复制
val customFlow1: Flow[String, DomainObj, Future[DomainObj]] =
  Flow[String]
    .map { s => DomainObj(s, 50) }
    .alsoTo(Sink.head)

val res: (Future[DomainObj], Future[Done]) = c1.run()

请注意,Sink.head实际上要求customFlow1只能在只发出一次的对象的下游使用。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63430943

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档