Получение карты Scala от Java свойства

Я пытался вытянуть переменные среды в scala сценарий с помощью Итераторов Java и / или Перечисления и понял, что доктор Frankenstein мог бы требовать происхождения, таким образом, я взломал следование из ужасного дерева вместо этого:

import java.util.Map.Entry
import System._

val propSet = getProperties().entrySet().toArray()
val props   = (0 until propSet.size).foldLeft(Map[String, String]()){(m, i) =>
  val e = propSet(i).asInstanceOf[Entry[String, String]]
  m + (e.getKey() -> e.getValue())
}

Например, распечатать упомянутую ту же среду

props.keySet.toList.sortWith(_ < _).foreach{k =>
  println(k+(" " * (30 - k.length))+" = "+props(k))
}

Не приступите к полировке этого t$ #d, просто покажите мне scala драгоценный камень, что я убежден, существует для этой ситуации (т.е. Свойства Java-> scala. Карта), заранее спасибо ;@)

12
задан Mechanical snail 14 January 2013 в 19:33
поделиться

1 ответ

Scala 2.7:

val props = Map() ++ scala.collection.jcl.Conversions.convertMap(System.getProperties).elements

Хотя это требует некоторой шрифтовой обработки. Позвольте мне поработать над этим немного больше.

val props = Map() ++ scala.collection.jcl.Conversions.convertMap(System.getProperties).elements.asInstanceOf[Iterator[(String, String)]]

Хорошо, это было легко. Дайте мне поработать над 2.8...

import scala.collection.JavaConversions.asMap
val props = System.getProperties() : scala.collection.mutable.Map[AnyRef, AnyRef] // or
val props = System.getProperties().asInstanceOf[java.util.Map[String, String]] : scala.collection.mutable.Map[String, String] // way too many repetitions of types
val props = asMap(System.getProperties().asInstanceOf[java.util.Map[String, String]])

Глаголы, конечно, можно уменьшить с помощью пары импортных шрифтов. Прежде всего, обратите внимание, что Карта будет мутирующей на 2.8. Положительным моментом является то, что при обратном преобразовании карты вы получите исходный объект.

Теперь я понятия не имею, почему Свойства реализуют Карта<Объект, объект>, учитывая, что в javadoc'е четко указано, что ключом и значением является Строка, но вот так. Приходится печатать, что делает неявный вариант гораздо менее привлекательным. При этом альтернатива является наиболее лаконичной.

EDIT

Scala 2.8 только что получил неявное преобразование из Properties в mutable.Map[String,String], что делает большую часть этого кода спорным.

7
ответ дан 2 December 2019 в 05:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: