这实际上取决于properties 的类型,但鉴于您上面的代码,我认为我们可以假设它是Map。如果是这种情况,那么您可以使用以下代码将 Map 实例的每个键值对映射(即转换)为 List 的其他内容(在本例中为字符串列表):
val jmUserProperties = properties.map { (key, value) -> "$key=$value" }
请注意,生成的 List 是不可变的(即您不能添加/删除值),因此不是 ArrayList 的实例。如果您需要一个可变列表(即,如果您希望能够添加/删除项目),那么您可以使用:
val jmUserProperties = properties.map { (key, value) -> "$key=$value" }.toMutableList()
同样,这不一定会返回 ArrayList(实际上它会返回,但这是一个可以随时更改的实现细节)。
如果您想确保找回ArrayList,您可以使用:
val jmUserProperties = ArrayList(properties.map { (key, value) -> "$key=$value" })
完整示例:
// create a starting Map
val properties = mapOf(
"key1" to "value1",
"key2" to "value2",
"key3" to "value3"
)
// transform the map into an ArrayList<String>
val jmUserProperties = ArrayList(properties.map { (key, value) -> "$key=$value" })
// do something with the resulting ArrayList
println(jmUserProperties)
// confirm it's an ArrayList by printing its type to stdout
println(jmUserProperties::class.java)
打印出来的:
[key1=value1, key2=value2, key3=value3]
class java.util.ArrayList
更多关于 properties.map { (key, value) -> "$key=$value" } 实际含义的信息:
-
map 是一个可以(通常)在集合上调用的函数,它允许将 Collection<A> 转换为 List<B> 并采用映射函数将 A 类型的对象转换为 B 类型的对象(很像collect 在 Groovy 中)。如果您了解 Groovy,那么 lambda 的语法应该看起来很熟悉。
-
(key, value) 是一个destructuring declaration,基本上在这种情况下用于从Map.Entry 类型的对象中提取键和值(这是Java 中Maps 包含的内容)。我之前链接的文档中的更多信息