Как преобразовать карту в Java.util.Properties? - PullRequest
2 голосов
/ 01 июня 2019

Есть ли способ конвертировать из Map в java.util.Properties?

Например, следующее Map я хотел бы преобразовать в java.util.Properties:

Map("x" -> 24, "y" -> 25, "z" -> 26)

Ответы [ 2 ]

5 голосов
/ 02 июня 2019

Попробуйте следующее

import java.util.Properties
val m = Map("x" -> 24, "y" -> 25, "z" -> 26)
val properties = new Properties
m.foreach { case (key, value) => properties.setProperty(key, value.toString) }
properties

который должен вывести

res1: java.util.Properties = {x=24, z=26, y=25}
4 голосов
/ 02 июня 2019

Вы можете использовать putAll из Properties, но он ожидает карту Java, поэтому вам также необходимо выполнить преобразование:

import scala.collection.JavaConverters._ 

val m = Map("x" -> 24, "y" -> 25, "z" -> 26)
val properties = new Properties()
properties.putAll(m.mapValues(_.toString).asJava)

Как и MarioGalic заметил в комментарии, все значения, хранящиеся в свойствах, должны быть строками (даже если теоретически вы можете хранить любой объект). Из документов:

Поскольку Properties наследуется от Hashtable, методы put и putAll могут быть применены к объекту Properties. Их использование настоятельно не рекомендуется, так как они позволяют вызывающей стороне вставлять записи, ключи или значения которых не являются строками. Вместо этого следует использовать метод setProperty. Если метод store или save вызывается для «скомпрометированного» объекта Properties, содержащего не строковый ключ или значение, вызов завершится неудачно. Аналогично, вызов метода propertyNames или list завершится ошибкой, если он вызывается для «скомпрометированного» объекта Properties, который содержит не-строковый ключ.

Из-за этого вам, вероятно, придется позвонить mapValues(_.toString):

properties.putAll(m.mapValues(_.toString).asJava)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...