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<String,Any?>){
    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<String,Any?>){
    var name: String by map
    var age: Int     by map
}

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

fun <T,R> List<T>.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的知识点.

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值