【问题标题】:Scala - convert an array of Strings to Set[PhoneNumbers]Scala - 将字符串数组转换为 Set[PhoneNumbers]
【发布时间】:2018-06-08 17:40:36
【问题描述】:

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

allowedPhoneNumbers:
  - 101111111001
  - 101111111002
  - 101111111003

我有一个配置特征,我可以像这样从 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
}

【问题讨论】:

  • 你的PhoneNumber 上课是什么??
  • 具有所需模式的类。我已经把它放在我最初的问题中。

标签: arrays scala list set


【解决方案1】:

一种选择是先执行映射操作,将您的字符串转换为电话号码:

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

【讨论】:

  • 我在从我的 Java util.List[String] 制作地图时遇到问题,因为从我的配置文件中读取的 getStringList 是基于 Java 的并返回一个 List
  • 我在一个项目中使用了相同的方法,我们在 getStringList 方法之后执行了一个 toList:config.getStringList("fields").toList 我会用它来更新我的答案
猜你喜欢
  • 2023-03-18
  • 1970-01-01
  • 2017-01-29
  • 1970-01-01
  • 2014-07-11
  • 1970-01-01
  • 2017-11-27
  • 2015-07-05
相关资源
最近更新 更多