Scala - 将字符串数组转换为Set [PhoneNumbers]

时间:2017-12-28 06:55:11

标签: arrays scala list set

我是Scala的新手,我有一个允许的PhoneNumbers列表,我应该从yaml文件中获取。我有这样的配置文件:

allowedPhoneNumbers:
  - 101111111001
  - 101111111002
  - 101111111003

我有一个Config特性,我可以从yaml文件中获取允许的电话号码列表:

val allowedPN1= config.getStringList("allowedPhoneNumbers").toArray

def allowedPN2: util.List[String] = config.getStringList("allowedPhoneNumbers")

我有一个应该返回Set [PhoneNumbers]的函数。 如果我试图返回一些

config.allowedPN1.toSet[PhoneNumbers]

编译很好,但是当我构建项目时,我得到了一个

type arguments [PhoneNumbers] do not conform to method toSet's type parameter bounds [B >: Object]

那么,我怎样才能将我的列表(取自配置文件)转换为一些Set [PhoneNumbers]。其中PhoneNumbers只是一个具有所需模式匹配的类。

case class PhoneNumbers(value: String) {
  require(Pattern.matches("\\d{12}", value),
    "The number must be a 12 digit phone number.")
  override def toString: String = value
}

1 个答案:

答案 0 :(得分:1)

一种选择是首先执行地图操作,将字符串转换为PhoneNumbers:

   val mySet = config.getStringList("allowedPhoneNumbers")
    .toList
    .map(PhoneNumbers(_))
    .toSet

运行一个快速示例:

scala> val lista = List("546452222222", "666666666666")
lista: List[String] = List(546452222222, 666666666666)

scala> lista.map(PhoneNumbers(_)).toSet
res4: scala.collection.immutable.Set[PhoneNumbers] = Set(PhoneNumbers(546452222222), PhoneNumbers(666666666666))