Scala根据条件合并2个列表

时间:2016-08-07 13:11:04

标签: list scala

所以我有2 Lists

val names = ListBuffer[(String, Double)]
names += ("Nat", 11.0)
names += ("Dan", 12.2)
names += ("Jeen", 0)
names += ("David", 55.0)

val list2 = ListBuffer[(String, Boolean)]
list2 += ("Nat", false)
list2 += ("Dan", true)
list2 += ("Jeen", false)
list2 += ("David", false)

所以我希望新的List所有名称等于"Dan",其值为> 0,值为true所以在我的示例中,这应该返回List 1个元素:

"Dan", 12.2

1 个答案:

答案 0 :(得分:2)

试试这个:

names
  .zip(list2.map(_._2))
  .filter(_._2)
  .map(_._1)
  .filter(_._2 > 0)

zip将名称列表与第二个列表中的true / false值组合在一起(我假设您的list2的排序方式与names相同,如示例所示因此,我们可以使用list2删除map中的名称以仅检索布尔值。这会得到一个List,如:

ListBuffer(((Nat,11.0),false), ((Dan,12.2),true), ((Jeen,0.0),false), ((David,55.0),false))

现在我们过滤真/假值(_._2),得到如下列表:

ListBuffer(((Dan,12.2),true))

现在我们不再需要布尔值了,所以请放弃它,通过map(_._1)给我们留下一个名值元组列表,结果是:

ListBuffer((Dan,12.2))

然后我们最后使用> 0过滤值为.filter(_._2 > 0)的位置,在您的示例中仍然为我们留下了具有相同内容的列表(尝试将Jeen更改为true看到最后一个过滤器在运行中):

ListBuffer((Dan,12.2))