Kotlin系列之迭代集合與map
阿新 • • 發佈:2019-02-14
今天來學習一下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是不是有有點吸引你了呢?