有条件地在 Scala 中创建不可变哈希集

Creating immutable Hashsets in scala conditionally

我有一个小函数可以做到这一点

val s = MutableHashSet[DateTime]()
if (a != null) s.add(a)
if (b != null) s.add(b)
if (c != null) s.add(c)
if (d != null) s.add(d)
s

我知道使用 null 不好(而且我可以使用 option),但让我们暂时忘记这一点,更多地关注如何使这个 HashSet 不可变。 MutableHashSetscala.collection.mutable.HashSet 相同。我看到一个类似的问题here。然而,创建多个 Seq 然后从中创建一个哈希集看起来有点过头了。

如果您想要将少量且固定数量的值转换为集合,我会使用

Set.empty[DateTime] ++ Option(a) ++ Option(b) ++ Option(c) ++ Option(c)

如果您有大量或可变数量的值,Patryk 的解决方案似乎是最好的。

应要求,我将我的评论移至答案。

最简单直接的选择是:

Seq(a,b,c,d).filter(_ != null).toSet

或者,您可以先将元素转换为 Option[DateTime]

val seq = Seq(a,b,c,d).map(Option.apply)

然后,一旦你有了 Seq[Option[DateTime]],你就可以:

seq.flatten.toSet