避免在 Scala 中调用 .toMap 之前转换为中间数据结构



让我们考虑以下代码:

Set(1, 2, 3, 4, 5)
.map(k => (k, if (k % 2 == 0) "even" else "odd"))
.toMap

有没有办法在 Scala 中简化这一点,避免创建中间集?我将在大型集合上做一些对性能敏感的事情,当场创建Map并没有什么坏处。

如果没有更好的结果,我正在考虑最终实现这样的东西:

Map.from(S, k => if (k % 2 == 0) "even" else "odd"))

我仍在使用 Scala 2.12。

谢谢

您可以使用foldleft

(1 to 5).foldLeft(Map.empty[Int, String])(
(r, k) => r + (k -> (if (k % 2 == 0) "even" else "odd"))
)

编辑

或者,为了避免toMap方法中的中间收集,您可以使用view

(1 to 5).view
.map(k => (k, if (k % 2 == 0) "even" else "odd"))
.toMap

Scala:如何从集合[K]创建一个Map[K,V]和一个从K到V的函数?

相关内容

最新更新