我想找到一种将Map<String, String?>
转换为Map<String, String>
并用null
值对进行过滤的最清晰,最优雅的方法。
我在下面有一个精心设计的解决方案,但是我不喜欢如何做一个不安全的!!
。有更好的方法吗?
fun Map<String, String?>.filterNonNull() = this
.filter { it.value != null }
.map { it.key to it.value!! }
.toMap()
答案 0 :(得分:1)
基于讨论here,您还可以使用类似以下内容:
fun <K, V> Map<K, V?>.filterNotNullValues(): Map<K, V> =
mutableMapOf<K, V>().apply {
for ((k, v) in this@filterNotNullValues) if (v != null) put(k, v)
}
答案 1 :(得分:0)
mapNotNull
作为map
和filter
的组合,但是返回List
而不是您想要的Map
fun <K, V> Map<K, V?>.filterNonNull(): Map<K, V> =
this.mapNotNull {
(key, value) -> if (value == null) null else Pair(key, value)
}.toMap()