Как преобразовать данные в Set [Tuple2] в класс case - PullRequest
2 голосов
/ 20 октября 2019

Один из моих методов возвращает List[(String,Option[Int])]. Я конвертирую его в Set вызывающий toSet[(String,Option[Int])] метод List

вопрос 1 - это даст мне Set[(String,Option[Int])]?

, тогда у меня есть класс case, который можно сопоставитьданные класса Tuple(String,Option[Int])

TagCount

case class TagCount (tag:String,count:Int)

Возможно ли, что при использовании toSet метода List я действительно получу Set[TagCount]вместо `Set [(String, Option [Int])]

Я заметил, что toSet может принимать аргумент типа B >: (String,Option[Int]), но я не могу понять, как сделать TagCount >: (String,Option[Int])

def toSet[B >: A]: Set[B]

Ответы [ 2 ]

2 голосов
/ 20 октября 2019

Предполагая, что кортеж точно соответствует типам полей класса case

case class TagCount(tag: String, count: Option[Int])
val s: Set[(String, Option[Int])] = Set("a" -> Some(42), "b" -> Some(11), "c" -> None)

, мы можем получить Set[TagCount], используя tupled метод, подобный этому

s.map(TagCount.tupled)

, который выдает

res1: scala.collection.immutable.Set[TagCount] = Set(TagCount(a,Some(42)), TagCount(b,Some(11)), TagCount(c,None))
1 голос
/ 20 октября 2019

Вы можете попробовать:

def foo(in: List[(String, Option[Int])]): Set[TagCount] =
  in.toSet.collect {
    case (key, Some(c)) => TagCount(key, c)
  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...