今天来学习一下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<String>()
val set = HashSet<String>()
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()
想当于返回两个值,我们声明了index
和value
来分别接收它。
2. 这里我们直接在双引号里面使用了$变量名
的方式,这是Kotlin里面的字符串模版功能,可以让我们不用使用+
连接字符串,直接用$变量名
,在输出时会自动替换为对应的变量值。
下面我们再说说如何迭代输出map,其实要是理解了上面的代码,下面的代码就可以一眼看懂,放上代码。
val map = HashMap<String, String>()
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是不是有有点吸引你了呢?