Подтвердить что ты не робот

Добавить в список, если значение не равно нулю

У меня есть функция, которая может вернуть значение 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)
...

Но он выглядит слишком тяжелым.

Есть ли лучшие решения?

4b9b3361

Ответ 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.