2017-12-28 7 views
1

Ich bin neu in Scala, ich habe eine Liste der zulässigen PhoneNumbers, die ich von einer Yaml-Datei erhalten sollte. Ich habe es unter meiner config-Datei wie folgt aus:Scala - konvertieren Sie ein Array von Zeichenfolgen auf [PhoneNumbers]

allowedPhoneNumbers: 
    - 101111111001 
    - 101111111002 
    - 101111111003 

Ich habe eine Config Charakterzug, wo ich die Liste der erlaubten Rufnummern aus yaml Datei wie das nehmen kann:

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

oder

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

Ich habe eine Funktion, die ein Set [PhoneNumbers] zurückgeben sollte. Wenn ich einige

config.allowedPN1.toSet[PhoneNumbers] 

Es kompiliert fein zurückzukehren bin versucht, aber wenn ich das Projekt baue ich eine

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

Also, wie kann ich meine Liste (konvertieren aus der Config genommen Datei) in einige Set [PhoneNumbers]. Wo PhoneNumbers nur eine Klasse ist, die eine erforderliche Musterübereinstimmung hat.

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

Was ist Ihr 'PhoneNumber' Klasse ist? ? –

+0

eine Klasse mit einem erforderlichen Muster. Ich habe es in meine erste Frage gestellt. – WDrgn

Antwort

1

Eine Möglichkeit ist, zunächst eine Karte Operation peform, die Saiten zu Phonenumbers zu konvertieren:

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

ein schnelles Beispiel Laufen:

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

Ich habe ein Problem, eine Karte von meinem Java util.List [String], weil getStringList, dass liest aus meiner Konfig-Datei ist Java-basiert und gibt eine Liste zurück WDrgn

+0

Ich habe die gleiche Methode in einem Projekt, machen wir eine ToList kurz nach der getStringList Methode. config.getStringList ("Felder") ToList werde ich meine Antwort aktualisieren mit, dass – SCouto

+0

thank you very much !!! – WDrgn

Verwandte Themen