我是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
}
答案 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))