【发布时间】:2017-11-14 14:37:24
【问题描述】:
我有一个功能
fun init(properties: Collection<Map<Any, Any>>?) {
properties?.filter { it.isNotEmpty() }
}
- 我需要过滤掉空地图。
- 我只需要具有
String类型的键和值的映射。 - 对于剩余的地图,我想迭代键来获取值。
【问题讨论】:
我有一个功能
fun init(properties: Collection<Map<Any, Any>>?) {
properties?.filter { it.isNotEmpty() }
}
String 类型的键和值的映射。 【问题讨论】:
您可以使用.all { ... } 来检查所有.keys 和.values 是否都是字符串:
properties
?.filter {
it.isNotEmpty() &&
it.keys.all { key -> key is String } &&
it.values.all { value -> value is String }
}
?.forEach { /* do some stuff with it */ }
请注意,您仍然需要未经检查的强制转换才能以 Map<String, String> 对过滤后的映射进行操作,因为编译器无法通过键和值检查推断类型。
【讨论】:
flatMap属性。因此,基于热键的答案,它看起来像这样:properties ?.filter { it.isNotEmpty() && it.keys.all { key -> key is String } && it.values.all { value -> value is String } } ?.flatMap { it.entries } ?.forEach { /* do something */ }