Добавить в список, если значение не равно нулю
У меня есть функция, которая может вернуть значение null:
def func(arg: AnyRef): String = {
...
}
и я хочу добавить результат в список, если он не равен null:
...
val l = func(o)
if (l != null)
list :+= l
....
или
def func(arg: AnyRef): Option[String] = {
...
}
...
func(o).filter(_ != null).map(f => list :+= f)
...
Но он выглядит слишком тяжелым.
Есть ли лучшие решения?
Ответы
Ответ 1
Вы можете просто добавить эту опцию в список. Это связано с тем, что Option
можно рассматривать как Iterable
(пустой для None
с одним единственным элементом для Some
) благодаря неявному преобразованию Option.option2Iterable
.
Итак, для варианта варианта (вторая версия func
) просто выполните:
list ++= func(o)
Для другого варианта (первая версия func
) вы можете сначала преобразовать возвращаемое значение func
в параметр с помощью Option.apply
(превратит null
в None
), или иначе оберните значение с помощью Some
), а затем выполните, как описано выше. Что дает:
list ++= Option(func(o))
Ответ 2
Сначала вы должны указать, что функция может/не может возвращать значение, в которое возвращается возвращаемое значение в Some
или None
def func(arg: AnyRef): Option[String] = {
// ...
Some(value) orElse None
}
Список из func (0) val list = func(0) collect {case Some(x) => x}
, который принимает только значения, которые определяются с помощью collect.