我有一个小功能,可以做到这一点
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是坏的(我可以使用选项)但是让我们暂时忘记它并且更多地关注如何使这个HashSet不可变。 MutableHashSet
与scala.collection.mutable.HashSet
相同。我看到了一个类似的问题here。然而,创建多个Seq
然后从中创建一个hashset看起来就像是一个过度杀伤。
答案 0 :(得分:1)
如果您要将一小部分且固定数量的值转换为集合,我只会使用
Set.empty[DateTime] ++ Option(a) ++ Option(b) ++ Option(c) ++ Option(c)
如果您有大量或可变数量的值,Patryk的解决方案似乎是最好的。
答案 1 :(得分:1)
根据请求,我正在将评论移至答案。
最简单,最直接的选择是:
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