Конвертировать Option [String] в Map [String, trait] в SCALA - PullRequest
0 голосов
/ 19 октября 2018

Я новичок в Scala и искал то же самое, что и как мы можем изменить с Option[String] на Map[String,trait], но не смог найти много.

Дело в том, что у меня есть поле типа Option[String] и я должен передать это значение в класс дел, который принимает входные данные как Map[String,User Defined trait].

Вот что я хочу знать, как я могу преобразовать значение Option[String] в Map[]

Можем ли мы использовать Option.fold в этом?

Не могли бы вы рассказать мне об этом подробнее.

TIA

Ответы [ 2 ]

0 голосов
/ 19 октября 2018

Попробуйте использовать toMap , как показано в следующем примере:

trait UDTrait[A] {
  def len(s: A): Int
}

case class MyClass(m: Map[String, UDTrait[String]])

def myOptionToMap(opt: Option[String]): Map[String, UDTrait[String]] =
  opt.map((_, new UDTrait[String]{ def len(s: String) = s.length })).toMap

MyClass(myOptionToMap(Some("a")))
// res1: MyClass = MyClass(Map(a -> $anonfun$myOptionToMap$1$$anon$1@10aabada))

MyClass(myOptionToMap(None))
// res2: MyClass = MyClass(Map())

В качестве альтернативы, вы можете использовать fold , как указано ниже:

def myOptionToMap(opt: Option[String]): Map[String, UDTrait[String]] =
  opt.fold(Map.empty[String, UDTrait[String]])(s =>
    Map(s -> new UDTrait[String]{ def len(s: String) = s.length })
  )
0 голосов
/ 19 октября 2018

Option[ T ] - это контейнер для нуля или одного элемента данного типа.Option[T] может быть либо Some[T], либо None объектом, который представляет отсутствующее значение.

A Map - это итерация, состоящая из пар ключей и значений.Если вы хотите построить карту с одной парой ключ-значение из непустого параметра, вы можете сделать следующее:

trait Foo

def convertNonEmptyOptionToMap(a:Some[String], t: Foo): Map[String, Foo] = Map(a.get -> t)

Тем не менее, я не совсем понимаю, что вы пытаетесьсделать.Было бы полезно больше контекста с примерами.

...