Kotlin系列之迭代集合与map

今天来学习一下Kotlin中如何迭代集合和map。

还是以往的惯例,先说说Java中的方式,在对比看看Kotlin中的方式。

Java中迭代集合和map

这个属于Java中的基础知识,这里贴一下代码,方便后面与Kotlin对比。
Java代码

List<String> list = new ArrayList<>();
Set<String> set = new HashSet<>();
Map<String, String> map = new HashMap<>();
for (int i = 0; i < 10; i++){
    list.add("i = " + i);
    set.add("i = " + i);
    map.put("key = " + i, "value = " + i);
}

for (String str : list){
    System.out.println(str);
}

for (String str : set){
    System.out.println(str);
}

for (Map.Entry<String, String> entry : map.entrySet()){
    System.out.println(entry.getKey() + "  " + entry.getValue());
}

Kotlin中迭代集合和map

Kotlin中迭代集合是使用上一篇中说到的for..in来来做的,与Java中的相似,但是map的迭代将采用一种不同的方式。

Kotlin迭代集合

val list = ArrayList()
val set = HashSet()
for (i in 1..10){
    list.add("value = " + i)
    set.add("value = " + i)
    map.put("key = " + i, "value = " + i)
}

//只迭代元素
for (value in list){
    println(value)
}

for (value in set){
    println(value)
}

上面的代码与Java中的很相似,得益于类型推导,我们可以不用写明迭代元素value的类型。
有时候我们可能需要在输出元素的同时输出对应的下标,在Kotlin中我们不需要专门声明一个变量,递增输出,可以使用下面的方式做到。

Kotlin迭代集合及下标

for ((index, value) in list.withIndex()){
    println("index = $index  value = $value")
}

上面的代码包含了几个知识点,需要注意一下。
1. 这里的list.withIndex()想当于返回两个值,我们声明了indexvalue来分别接收它。
2. 这里我们直接在双引号里面使用了$变量名的方式,这是Kotlin里面的字符串模版功能,可以让我们不用使用+连接字符串,直接用$变量名,在输出时会自动替换为对应的变量值。

下面我们再说说如何迭代输出map,其实要是理解了上面的代码,下面的代码就可以一眼看懂,放上代码。

val map = HashMap()
for (i in 1..10){
    map.put("key = " + i, "value = " + i)
}

for ((key, value) in map){
    println("key = $key  value = $value")
}

是不是很好懂,这里Kotlin直接将key和value映射到我们声明的两个变量上了,这里我们仍然使用了字符串模版的方式来输出。

写在最后

我们发现,Kotlin中的迭代用更少更简洁的代码实现了与Java中同样的功能,Kotlin是不是有有点吸引你了呢?

你可能感兴趣的:(Kotlin,Kotlin入门到实战)