Преобразование из Java ArrayList, полученного из unwrapped () в список Scala - PullRequest
0 голосов
/ 12 октября 2018

Lang: SCALAУ меня есть один map, определенный в моих файлах свойств как:

dummy {
  "Key1" : ["value1","value2", "value3"]
  "Key2" : ["Hi1", "Hi2"]
  "Key3" : ["Bye1"]
}

Теперь я могу найти entryset для выше map и заполнить его в map в scala как:

var configTrialMap: Config = config.getConfig("dummy")
val resMap = mutable.Map[String, List[String]]()
for (entry <- configTrialMap.entrySet.asScala) {
    resMap.put(entry.getKey, entry.getValue.unwrapped().toString.split(",").map(_.trim).toList)
}

Но проблема в том, что этот код выглядит неуклюже, и я должен поставить некоторое регулярное выражение, чтобы заменить все [, ] пустым символом

Я видел некоторые решения для преобразования java-коллекции в scala один, но ни один из них не кажетсячтобы работать с unwrapped() вернуть экземпляр Object, и я должен сначала разыграть его.

Я попытался поиграть с:

  1. asScalaBuffer (https://alvinalexander.com/scala/how-to-go-from-java-collections-convert-in-scala-interact)

  2. val javaToScalaList = entry.getValue.unwrapped().asInstanceOf[List[String]]

  3. .asScala.toList

Извините, если это слишком наивно. Iя новичок в скале.

1 Ответ

0 голосов
/ 13 октября 2018

Вы можете сделать:

  import com.typesafe.config.ConfigFactory
  import scala.collection.JavaConverters._
  //load config into configTrialMap

configTrialMap.getObject("dummy")
  .keySet().asScala
  .map(k => {
    val k2 = k.replaceAll("\\.", "\".\"")  //quote all the dots in key
    ("dummy."+k2, configTrialMap.getStringList(s"dummy." + k2).asScala.toList)
  })
  .toMap

, что приведет к:

scala.collection.immutable.Map[String,List[String]] = Map(dummy.U"."S"." Sample -> List(Bye1), dummy.Key2 -> List(Hi1, Hi2), dummy.Key1 -> List(value1, value2, value3))

РЕДАКТИРОВАТЬ: (чтобы добавить замену регулярного выражения для исправления путей с точками)

Чтобы обрабатывать точки в ключах, вам нужно заключить их в кавычки, используя символ ".Я обновил ответ с помощью регулярного выражения, которое делает это.

...