Kotlin函数的使用(1)

Kotlin中创建集合:

  val set = hashSetOf(1, 2, 3) ----创建一个set

  val list = arrayLIstOf(1, 2, 3)----创建一个list

  val map = hashMapOf(1 to "one", 2 to "two", 3 to "three")----创建一个map

Kotlin中的没有自己的集合类,都是采用的标准的Java集合类。尽管Kotlin的集合类和Java的集合类完全一致,但是Kotlin在Java集合类的基础上扩展了一些常用的方法。

比如可以通过下面的方式来获取一个列表的最后一个元素,或者是得到一个数字列表的最大值

val strings = listOf("one", "two", "three")
println(strings.last())
>>three

val numbers = setOf(1, 2, 3)
pritln(numbers.max())
>>3

创建集合后我们来打印一下集合,Java的集合都有一个默认的toString实现,输出格式固定,例如下面这样

val list = listOf(1, 2, 3)
println(list)
>>[1, 2, 3]

如果你需要用分号来分割每一个元素,然后用括号括起来:(1;2;3)。在Java中就需要自己来实现,在Kotlin中,有一个专门的函数来处理这种情况。 我们先看看如果我们用自己实现的样子

fun <T> joinToString(
        collection: Collection<T>, 
        separator: String, 
        prefix: String,
        postfix: String): String {
    val result = StringBuilder(prefix)
    for((index, element) in collection.withIndex()) {
        if(index > 0) result.append(separator)
        result.append(element)
    }
    result.append(postfix)
    return result.toString()
}

val lsit = listOf(1, 2, 3)
println(joinToString(list, ";", "(", ")"))

>>(1;2;3)

像上面这样的调用是不是感觉可读性非常差,根本不知道传的参数是什么意义,除非去看代码。Kotlin中可以让可读性更好,使用命名参数,调用函数时,可以显示的标明一些参数的名称。如果在调用一个函数时,指明了一个参数的名称,那它之后的所有参数都需要标明名称。

joinToString(collection, separator = ";", prefix = "(", postfix = ")")

Kotlin在函数声明的时候可以指定参数的默认值,为了避免创建重载的函数。修改一下上面的代码

fun <T> joinToString(
        collection: Collection<T>, 
        separator: String = ",", 
        prefix: String = "",
        postfix: String = ""): String {
    val result = StringBuilder(prefix)
    for((index, element) in collection.withIndex()) {
        if(index > 0) result.append(separator)
        result.append(element)
    }
    result.append(postfix)
    return result.toString()
}

val lsit = listOf(1, 2, 3)
println(joinToString(list, ",", "", ""))
println(joinToString(list))
println(joinToString(list, ";"))

>>1,2,3
>>1,2,3
>>1;2;3

现在可以用所有参数来调用这个函数了,或者省略部分参数。当使用常规的调用语法时,必须按照函数声明中定义的参数顺序来给定参数,可以省略的只有排在末尾的参数。如果使用命名参数,可以省略中间的一些参数,也可以以你想要的任意顺序只给定你需要的参数:

joinToString(list, postfix = ".", prefix = "#")
>>#1,2,3.

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值