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.