【问题标题】:Mapping values from a List of Either to List将值从一个列表映射到列表
【发布时间】:2018-06-09 06:31:28
【问题描述】:

我有两个列表,一个是:

val l1 = List[Either[A,B]]

val l2 = List[String]

现在,我需要做的就是映射这两个。即,如果 l1 是 A,则从 l2 返回相应的值。尝试过类似的东西:

for {
   elem1  <- l1
   elem2  <- l2
   result <- if(elem1.isLeft) url
} yield result

这不起作用。因为,我没有处理else 的情况。与匹配而不是if 类似。我该如何实现这一目标?

【问题讨论】:

    标签: scala loops syntactic-sugar either


    【解决方案1】:

    你可以这样做(我假设l2 至少具有与l1 中的Lefts 相同数量的A 类型元素):

    val result: List[String] = l1.zip(l2).filter(_._1.isLeft).map(_._2)
    

    否则,如果您更喜欢使用for,这也可以解决问题:

    scala> for {
     |   e1 <- l1.zip(l2)
     |   if e1._1.isLeft
     | } yield e1._2
    

    【讨论】:

    • 是的。不知道这个 zip 选项,奇怪的是它也没有出现在搜索中。优雅。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-09-21
    • 1970-01-01
    • 2010-09-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-07
    相关资源
    最近更新 更多