美文网首页Android 知识
kotlin 内置函数- 关联associate...

kotlin 内置函数- 关联associate...

作者: zcwfeng | 来源:发表于2022-05-06 16:29 被阅读0次

    关联 转换允许从集合元素和与其关联的某些值构建 Map。 在不同的关联类型中,元素可以是关联 Map 中的键或值。

    • 基本的关联函数 associateWith() 创建一个 Map,其中原始集合的元素是键,并通过给定的转换函数从中产生值。 如果两个元素相等,则仅最后一个保留在 Map 中
    val numbers = listOf("one", "two", "three", "three")
    println(numbers.associateWith { it.length })
    

    ------>result
    {one=3, two=3, three=5}

    • 为了使用集合元素作为值来构建 Map,有一个函数 associateBy()。 它需要一个函数,该函数根据元素的值返回键。如果两个元素相等,则仅最后一个保留在 Map 中。 还可以使用值转换函数来调用 associateBy()
    val numbers = listOf("one", "two", "three", "four")
    
    println(numbers.associateBy { it.first().toUpperCase() })
    println(numbers.associateBy(keySelector = { it.first().toUpperCase() }, valueTransform = { it.length }))
    

    ------>result
    {O=one, T=three, F=four}
    {O=3, T=5, F=4}

    • 另一种构建 Map 的方法是使用函数 associate(),其中 Map 键和值都是通过集合元素生成的。 它需要一个 lambda 函数,该函数返回 Pair:键和相应 Map 条目的值。

    请注意,associate() 会生成临时的 Pair 对象,这可能会影响性能。 因此,当性能不是很关键或比其他选项更可取时,应使用 associate()

    data class FullName(val firstName: String, val lastName: String)
    
    
        fun parseFullName(fullName: String): FullName {
            val nameParts = fullName.split(" ")
            if (nameParts.size == 2) {
                return FullName(nameParts[0], nameParts[1])
            } else throw Exception("Wrong name format")
        }
    
        val names = listOf("Alice Adams", "Brian Brown", "Clara Campbell")
        println(names.associate { name -> parseFullName(name).let { it.lastName to it.firstName } })
    

    ------> result
    {Adams=Alice, Brown=Brian, Campbell=Clara}
    同上需要建立转换函数parseFullName 并且定义解构 data

    相关文章

      网友评论

        本文标题:kotlin 内置函数- 关联associate...

        本文链接:https://www.haomeiwen.com/subject/udoayrtx.html