加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

scala – 什么是在akka流中过滤掉左边的惯用方法?

发布时间:2020-12-16 18:14:49 所属栏目:安全 来源:网络整理
导读:我有一个流,其中包含大量的值.我正在寻找一种过滤掉Either-Left和Either-Right上的地图的不道德的方法.我想避免类似的事情 final case class Foo(x: Either[String,Int],y:Int)val foos = functionReturningSeqOfFoo()Source(foos) .filter(_.x.isRight) .ma
我有一个流,其中包含大量的值.我正在寻找一种过滤掉Either-Left和Either-Right上的地图的不道德的方法.我想避免类似的事情

final case class Foo(x: Either[String,Int],y:Int)

val foos = functionReturningSeqOfFoo()

Source(foos)
  .filter(_.x.isRight)
  .map(foo => (foo.x.right.get,foo.y))
  .map { case (x,y) =>
    doSomethingWith(x,y)
  }
  .runWith(Sink.seq)

这是一个最小的例子.因为我的流非常长,所以这很混乱,并且感觉不是一个好方法.

顺便说一下,在我的情况下同样适用于Option [T].

解决方法

你可以使用 collect:

Source(foos).collect { case Foo(Right(x),y) => (x,y) }

或使用以下方法直接转换元组:

Source(foos).collect { case Foo(Right(x),y) => doSomethingWith(x,y) }

collect将删除未定义部分函数的所有对象.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读