
96
|
第
5
章
5.4
从集合构建
map
问题
存在一个键 list,如何通过将每个键与生成的值相关联来构建 map。
解决方案
通过提供每个键要执行的 lambda 表达式来使用 associateWith 函数。
讨论
假设你有一个键 set,并且想要将每个键映射到一个生成的值。一种实现方法是使用
associate 函数,如示例 5-12 所示。
示例 5-12:使用 associate 来生成值
val keys = 'a'..'f'
val map = keys.associate { it to it.toString().repeat(5).capitalize() }
println(map)
执行这段代码段将输出以下结果:
{a=Aaaaa, b=Bbbbb, c=Ccccc, d=Ddddd, e=Eeeee}
associate 函数是一个 Iterable<T> 上的内联扩展函数,它接收一个将 T 转化为
Pair<K,V> 的 lambda 表达式。在这个示例中,to 函数是一个中缀函数,它使用左边
与右边的参数生成一个 Pair。
这种方法是有效的,但是在 Kotlin 1.3 中添加了一个名为 associateWith 的新函数,
该函数简化了代码。示例 5-13 展示了使用 associateWith 重构的先前的代码。
示例 5-13:使用 associateWith 生成值
val keys = 'a'..'f'
val map = keys.associateWith { it.toString().repeat(5).capitalize() ...