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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Scala - 将字符串数组转换为Set [PhoneNumbers]相关的知识,希望对你有一定的参考价值。

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

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

   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))

以上是关于Scala - 将字符串数组转换为Set [PhoneNumbers]的主要内容,如果未能解决你的问题,请参考以下文章

将字符串值转换为整数数组

将 Scala 数组转换为唯一排序列表的有效方法

Scala学习(集合01)

Scala学习(集合01)

WrappedArray$ofRef 不能转换为 scala.collection.immutable.Seq

如何在 Scala 中将 RDD 转换为二维数组?