kotlin中map的使用技巧

这里是整理的一些随机用的,没有条理和前后逻辑

1.创建一个map的方式:

val mapp = mapof("key" to 24,"name" to "zhangsan","age" to 25)
mapp.getValue("name")
mapp["name"]      //相当于上一句代码

2.map的遍历

for ((k,v) in map){
    println("$k -> $v")
}

3.在kotlin中,map是只读的,而mutableMap是var类型的。
eg:

class User(val map:Map){
    val name:String by map
    val age:Int     by map
}

val user = User(mapof{
    "name" to "zhangsan"
    "age" to 25
})

//现在我们把只读的Map改为可变的MutableMap:
class MutableUser(val map : MutableMap){
    var name: String by map
    var age: Int     by map
}

4.在高阶函数和lambda表达式使用时会出现这种情况:

fun  List.map(transform:(T) -> R):List<R>{ val result = arrayListOf<R>() for(item in this) result.add(transform(item)) return result }

这里的调用看起来都是过于复杂的,先定义一个空的ArrayList<>(),这种方法一般都不是高效的方法,我们可以写成这样:

val arrayDouble = ints.map(value -> value * 2)

当出现这种情况时,如果括号中的参数只有一个,那么完全可以省略括号,同时其变量可以用it来代替,还可省略“->”:

ints.map { it *2 }

5.这里有一个概念,叫做“对lambda表达式参数使用解构声明语法”,使用map对集合中的数据进行遍历就是其中的一个例子。

map.mapValues { entry -> "${entry.value}!" }
map.mapValues { (key, value) -> "$value!" }

注意声明两个参数和声明⼀个解构对来取代单个参数之间的区别:

{ a //-> …… } // ⼀个参数
{ a, b //-> …… } // 两个参数
{ (a, b) //-> …… } // ⼀个解构对
{ (a, b), c //-> …… } // ⼀个解构对以及其他参数

6.kotlin中 没有专门的语法 来创建list或者set,要用标准库方法,如listof(),mutableof(),setof(),mutableSetof()。在非性能关键代码中创建map可以用一个简单的惯用方法来完成:map(a to b, c to d).
【上面这句是官网翻译文档,师父说不能别人翻译的全信,嗯意思就是 其实listof(),mutableof(),setof(),mutableSetof()就是构造函数,就是用来创建对应集合的。hah~】
在这些集合相关的类型中,我们用三个标志,暂时称之为标志吧,来定义:first、last和step 。 其中first是第一个元素,last是最后一个元素,每个元素的后一个元素就是前一个元素加step。所以呢,for循环可以写成这样:

for(i:int = first;i < last,i += step){
    //...
}

7.今天写代码的时候,突然看到一种炒鸡牛掰的简便写法,分享:
为了遍历一个集合,进行一定的操作之后,再返回一个List集合,肯定最先想到的是:先创建一个空的ArrayList,用来存储每次遍历之后得到的数据,再返回这个ArrayList,代码是这样:

fun getSomeThing(users:MutableIterable<User>) : MutableList<Any>{
    val userList= mutableListof<Any>()
    users?.forEach{
        userList.add(user.getUid())
    }
    return userList
}

hah~其实我们可以一句话搞定这五行代码:

users.mapTo(arrayList(),{user.getUid()})

嗯 其实第一种完全是以java思想来写的,下面这句才是标准写法。

欢迎指正或者教我更加牛掰的关于map的知识点.

你可能感兴趣的:(kotlin,map)