Kotlinコンテナは、Javaに基づいて設定され、変更および拡張された、それが導入された不変コレクションを便利で実用的な機能の数を拡大しながら、。
さらに、だけでなく、オブジェクトKoltin共通のコレクションクラスを保持することができますが、また、変数の型の機能を保持しています。
次の例では、コレクションクラスは、2つの機能を保持しています。
//声明一个持有类型为 (Int)->Boolean的List,元素为两个函数
val funlist: List<(Int) -> Boolean> = listOf({ it -> it % 2 == 0 }, { it -> it % 2 ==1})
そして、この時間は、我々は、関数呼び出し内でどのコードを選択することができます
val list = listOf(1, 2, 3, 4, 5, 6, 7)
list.filter(funlist[0]) //传入第一个函数funlist[0],返回[2,4,6]
list.filter(funlist[1]) //传入第二个函数funlist[1],返回[1,3,5,7]
7.1コレクションクラスの継承階層
コレクションの概要は、主にセット、地図、リスト3のセット、の話されていません。
そして、彼らの継承階層とJavaはほぼ同じですが、いくつかの違いがあります。
ここではいくつかのカテゴリは次のとおりです。
- MutableIterable
削除要素の繰り返し反復サポート中 - コレクションには、
読み取り専用書き込み可能ではありません。 - MutableCollectionの
コレクションインターフェイス要素と秩序の要素を追加し、除去するためのサポート、ならびに追加、削除、および他の機能 - リスト
順序要素の、読み取り専用にすることができません書き込み - MutableList
リスト機能に加え等、追加、クリア、削除、書き込み機能だけでなく、リードデータを持っています - セットには、
読み取り専用の書き込み可能ではありません。
概要を
見ることができ、いくつかのセットが書き込み可能な、いくつかのコレクションが書かれていません。
例えば、リストは読み取り専用に分かれているList
と読み書きをMutableList
、セット、あまりにも
無後継地図コレクションが、それはまた、読み取り専用に分かれているMap
と読み書きMutableMap
コレクションの作成7.2
Kotlinは、それぞれ使用してlistOf()
、setOf()
、mapOf()
不変のリストを作成する機能、設定、地図のコンテナの
使用mutableListOf()
、mutableSetOf()
、mutableMapOf()
それぞれMutableList、MutableSet、MutableMapコンテナを作成する機能を。
val list = listOf(1, 2, 3, 4, 5, 6, 7) //创建不可变list
val list1 = mutableListOf("A", "B", "C") //创建可变list
何の要素が空のリストを作成しないようにする場合は、listOfを使用することができますが、今回はパラメータの型を宣言する必要があります。
//这样声明是会报错的
val emptyList = listOf()
//正确姿势
val emptyList<Int> = listOf()
コレクション内の7.3トラバースの要素
リストは、要素を反復処理するためのforeach機能を拡張するのIterableインターフェース、からSetクラスの継承は、マオインタフェースは、拡張のforEachであります
list.forEach{
println(it)
}
set.forEach{
println(it)
}
map.forEach{
println("key = ${it.key}, value = ${it.value}")
}
また、我々は要素を横断するとき、インデックスの添字にアクセスしたい、とセットリストで使用することができた場合 forEachIndexed()
list.forEachIndexed { index, value -> println("list index = ${index}, value = ${value} ")
set.forEachIndexed{ index, value -> println("set index = ${index} , value = ${value}")}
}
7.4マッピング機能
マップ機能を使用して、集合の要素は、順次、新しい値が新しいセットの要素にマッピングされる特定の伝達関数にマッピング操作を使用して行われ、新たなコレクションを返すことができます。
リストでは、設定、および地図インタフェースは、マップ機能を提供し、反復処理可能インターフェースを継承しています。例としては、次のとおりです:
val list = listOf(1, 2, 3, 4, 5, 6, 7)
val set = setOf(1, 2, 3, 4, 5, 6, 7)
val map = mapOf(1 to "a", 2 to "b", 3 to "c")
list.map{ it * it} //返回[1, 4, 9, 25, 36, 49]
set.map{ it + 1} //返回[2, 3, 4, 5, 6, 7, 8]
map.map{ it.value + "$"} //返回[a$, b$, c$]
我々はまた、我々はリストを渡すように、それはまた、データ型を指定でき、ちょうどmap関数よりも上で渡すことができます。
val strList = listOf("a", "b", "c")
strlist.map{ it -> listOf(it + 1, it + 2, it + 3, it + 4) }
このとき、一覧リスト内にネスト戻り型、すなわちAは、上記のコードは次の結果を戻します。
//嵌套List
[[a1, a2, a3, a4], [b1, b2, b3, b4], [c1, c2, c3, c4]]
Kotlinも提供してflatten()
効果が層構造に「タイル張り」入れ子構造のリストです。コードは以下の通りであります:
//"平铺"函数,把嵌套在List中的元素"平铺"成一层List
strlist.map{ it -> listOf(it +1, it + 2, it +3, it +4) }.flatten()
次のように出力されます。
[a1, a2, a3, a4, b1, b2, b3, b4, c1, c2, c3, c4]
場合flatMap機能「複合論理」地図フラットとの二つの機能は、以下のサンプルコード:
strlist.flatMap { it -> listOf(it + 1, it + 2, it + 3, it + 4) }
//输出:
[a1, a2, a3, a4, b1, b2, b3, b4, c1, c2, c3, c4]
7.5フィルタ機能
我々は以前にフィルタ()、ここではまず、コードサンプルを引用を研究している、我々は次のステートメントにデータクラスを使用して、学生のオブジェクトがあります:
data class Student(var id:Long, var name: String, var age: Int, var score: Int){}
val studentList = listOf(
Student(1, "Java", 20, 100)
Student(2, "Kotlin", 10, 80)
Student(3, "Python", 19, 95)
)
私たちは19歳以上の学生をフィルタリングしたい場合は、この時間は、コードを書くことができます。
studentList.filter{ it.age >= 19}
アクセスインデックスを介して濾過した場合は、使用することができます filterIndexed()
val list = listOf(1, 2, 3, 4, 5, 6, 7)
list.filterIndexed{ index, it -> index % == 0 && it > 3}
//输出
[5, 7]
7.6ソート機能
Kotlinのコレクションクラスは逆の順序で機能要素のセットを提供します reversed()
val list = listOf(1, 2, 3, 4, 5, 6, 7)
val set = setOf(1, 3, 2)
list.reversed() //倒序函数,返回[7, 6, 5, 4, 3, 2, 1]
set.reversed() //返回 (2, 3,1)
ソート機能を昇順するとsorted()
、
list.sorted() //返回[1, 2, 3, 4, 5, 6, 7]
set.sorted() //返回[1, 2, 3]
重量の7.7要素
我々はリストの重複排除の要素を一覧表示したい場合は直接呼び出すことができます distinct()
val dupList = listOf(1, 1, 2, 2, 3, 3, 3)
dupList.distinct() //返回 [1, 2, 3]