将值列表中的值映射到列表

问题描述 投票:1回答:1

我有两个列表,一个是:

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个回答
1
投票

你可以做这样的事情(我假设l2A中至少有与Left类型相同数量的l1元素):

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
© www.soinside.com 2019 - 2024. All rights reserved.