首页 > 解决方案 > 在 Map 上按值谓词查找的惯用方式

问题描述

搜索地图并找到与值或 null 的谓词匹配的第一个键的最佳方法是什么?我下面的代码对于 kotlin 标准来说看起来太冗长了。请帮忙。

fun  <K, V> find(map : Map<K, V?>, predicate: (V?) -> Boolean): K? {
    var key : K? = null
    map.forEach { it ->
        if(predicate(it.value)) {
            key = it.key
            return@forEach
        }
    }
    return key
}

标签: kotlin

解决方案


map.entries.firstOrNull { predicate(it.value) }?.key

entries用于使Map可迭代,并且是“免费的”(因为它不需要迭代地图)。当然,它启用了它Map本身缺少的所有集合扩展功能,而不仅仅是firstOrNull.

(您也可以用 替换firstOrNullfind它们在这里是等价的。)


推荐阅读