Создание неизменных Hashsets в Scala условно
У меня есть небольшая функция, которая делает это
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 неизменным. MutableHashSet
такой же как scala.collection.mutable.HashSet
, Я видел подобный вопрос здесь. Однако создание нескольких Seq
и затем хэш-сет из этого выглядит как слишком много излишнего.
2 ответа
По запросу я перевожу свой комментарий к ответу.
Самый простой и простой вариант:
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
Если у вас есть небольшое и фиксированное количество значений, которые вы хотите преобразовать в набор, я бы просто использовал
Set.empty[DateTime] ++ Option(a) ++ Option(b) ++ Option(c) ++ Option(c)
Если у вас большое или переменное количество значений, решение от Patryk кажется лучшим.