如何以清晰的方式将kotlin Map <String,String?>转换为Map <String,String>?

时间:2019-07-23 19:16:20

标签: kotlin

我想找到一种将Map<String, String?>转换为Map<String, String>并用null值对进行过滤的最清晰,最优雅的方法。

我在下面有一个精心设计的解决方案,但是我不喜欢如何做一个不安全的!!。有更好的方法吗?

fun Map<String, String?>.filterNonNull() = this
            .filter { it.value != null }
            .map { it.key to it.value!! }
            .toMap()

2 个答案:

答案 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作为mapfilter的组合,但是返回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()