我想在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中的东西?
答案 0 :(得分:4)
你在找这个吗?
List(('x', 1), ('y', 2)).map {
case (topic, partition) => topic
}
修改:还有一种方法可以做同样的事情,就像@senia建议的那样:
for {
(topic, partition) <- List(('x', 1), ('y', 2))
} yield topic