[TOC]
## 区间、数组、集合之间转换
在Kotlin中区间、数组、集合都是描述一系列元素的集合。通过上面的学习,我们看到它们有不同的地方,也有相似的地方。其实只要把其中一个的学习思路把握了。学习其他依葫芦画瓢的事情。
实际上,区间、数组、集合之间还可以相互转换。
### Range转Array、List、Set
区间可以转数组,也可以转List和Set集合。转数组通过arrayOf方法,转List通过toList方法,转Set通过toSet方法。
arrayOf方法,可以接收区间参数,返回数组,参考签名:
```java
public inline fun
arrayOf(vararg elements: T): Array
toList方法,转换为List,参考签名:
```java
public fun Iterable.toList(): List {
toSet方法,返回Set,参考签名:
```java
public fun Iterable.toSet(): Set {
我们通过一个案例来验证下,参考代码:
fun main(args: Array) {
val intRange = 1..10
//Range->Array
val arr = arrayOf(intRange)
println(arr)
//Range->List
val list = intRange.toList()
println("转换后的list集合:$list")
//Range->Set
val set = intRange.toSet()
println("转换后的set集合:$set")
[Lkotlin.ranges.IntRange;@4d7e1886
转换后的list集合:[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
转换后的set集合:[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
Process finished with exit code 0
### Array转List、Set
数组可以转List和Set集合。转List通过toList方法,转Set通过toSet方法。
toList方法,转换为List,参考签名:
```java
public fun Iterable.toList(): List {
toSet方法,返回Set,参考签名:
```java
public fun Iterable.toSet(): Set {
我们通过一个案例来验证下,参考代码:
fun main(args: Array) {
val array = arrayOf(1, 2, 3, 4)
val newList = array.toList()
println(newList)
val newSet = array.toSet()
println(newSet)
[1, 2, 3, 4]
[1, 2, 3, 4]
Process finished with exit code 0
### List转Array和Set
List可以转Array和Set集合。转Array通过toIntArray和toTypedArray,转Set通过toSet方法。
toIntArray方法,转换为Int数组,方法签名:
```java
public fun Collection.toIntArray(): IntArray
toTypedArray方法,根据List中包含元素的类型转换为对应的集合,如果是List转换为String数组,如果是List转换为Int数组,方法签名:
![](http://upload-images.jianshu.io/upload_images/7368752-a6dbd9178574feba.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
这里用到了关键字**reified**,这个是在泛型里面会接受的知识点。
toSet方法,返回Set,参考签名:
```java
public fun Iterable.toSet(): Set {
我们通过一个案例来验证下,参考代码:
fun main(args: Array) {
val list = listOf(1,2,3,4,5)
val intArray = list.toIntArray()
println(intArray.toList())
val newArray = list.toTypedArray()
println(newArray.toList())
val newSet2 = list.toSet()
println(newSet2)
[1, 2, 3, 4, 5]
[1, 2, 3, 4, 5]
[1, 2, 3, 4, 5]
Process finished with exit code 0
### Set转Array和List
Set可以转Array和List集合。转Array通过toIntArray和toTypedArray,转List通过toList方法。
toIntArray方法,转换为Int数组,方法签名:
```java
public fun Collection.toIntArray(): IntArray
toTypedArray方法,根据List中包含元素的类型转换为对应的集合,如果是List转换为String数组,如果是List转换为Int数组,方法签名:
![](http://upload-images.jianshu.io/upload_images/7368752-8af381cc95d3cdcd.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
这里用到了关键字**reified**,这个是在泛型里面会接受的知识点。
toSet方法,返回Set,参考签名:
```java
public fun Iterable.toSet(): Set {
我们通过一个案例来验证下,参考代码:
fun main(args: Array) {
val set = setOf(1, 2, 3, 4, 5)
val intArray = set.toIntArray()
println(intArray.toList())
val array = set.toTypedArray()
println(array.toList())
val list = set.toList()
println(list)
[1, 2, 3, 4, 5]
[1, 2, 3, 4, 5]
[1, 2, 3, 4, 5]
Process finished with exit code 0
### Map转Array、List和Set
Map可以直接转List集合,那么List中所转元素的类型就是Pair。Map想要转Array、List和Set只能先获取map的keys或者values进行换行。所用的方法还是之前提到的toList、toSet、toTypedArray,所以这里就不做过多解释了,直接演示下例子:
fun main(args: Array) {
val map = mutableMapOf("a" to 1, "b" to 2, "c" to 3)
val values = map.values
val keys = map.keys
val array = values.toTypedArray()
println(array.toList())
val list = values.toList()
println(list)
val set = values.toSet()
println(set)
val arr = keys.toTypedArray()
println(arr.toList())
val newList = keys.toList()
println(newList)
val newSet = keys.toSet()
println(newSet)
println("---------key 和 values 转换为其他---------")
val list1 = map.toList()
for (pair in list1) {
println("${pair.first}->${pair.second}")
[1, 2, 3]
[1, 2, 3]
[1, 2, 3]
[a, b, c]
[a, b, c]
[a, b, c]
---------key 和 values 转换为其他---------
Process finished with exit code 0