元组在地图内拆包

时间:2014-02-14 10:27:28

标签: scala

我想在map内解包元组以访问某些值。

在Python中我会这样做:

>>> [topic for topic, partition in [('x', 1), ('y', 2)]]
['x', 'y']

此处将元组('x', 1), ('y', 2)解压缩到topic, partition,然后我访问topic

在Scala中我只能这样做:

List(('x', 1), ('y', 2)).map(_._1)

但是我想将显式解包到元组作为一个非常规的步骤(即使它引入了一些开销)因为我认为它使代码更具可读性。

我想实现像

这样的东西
List(('x', 1), ('y', 2)).map((topic, partition) => topic)

不幸的是它不起作用:

> <console>:9: error: wrong number of parameters; expected = 1
                List(('x', 1), ('y', 2)).map((topic, partition) => topic)

其他尝试(例如List(('x', 1), ('y', 2)).map(Tuple2(topic, partition) => topic))也失败了。

有没有办法实现类似于我在Python中的东西?

1 个答案:

答案 0 :(得分:4)

你在找这个吗?

List(('x', 1), ('y', 2)).map {
  case (topic, partition) => topic
}

修改:还有一种方法可以做同样的事情,就像@senia建议的那样:

for { 
  (topic, partition) <- List(('x', 1), ('y', 2)) 
} yield topic