memo

Table of Contents

xxxOf

関数名 生成されたインスタンス メソッドシグネチャ  
arrayListOf ArrayList fun arrayListOf(vararg elements: T): ArrayList  
arrayOf パラメータに渡された型の配列   immutable
hashMapOf HashMap fun <K, V> hashMapOf(vararg pairs: Pair<K, V>): HashMap<K, V>  
hashSetOf HashSet fun hashSetOf(vararg elements: T): HashSet  
linkedMapOf LinkedHashMap fun <K, V> linkedMapOf(vararg pairs: Pair<K, V> ): LinkedHashMap<K, V> 順序が維持される
linkedSetOf LinkedHashSet fun linkedSetOf(vararg elements: T): LinkedHashSet 順序が維持される
listOf Arrays   immutable
mapOf LinkedHashMap fun <K, V> mapOf(vararg pairs: Pair<K, V>): Map<K, V> immutable 順序が維持される
mutableListOf ArrayList fun mutableListOf(vararg elements: T): MutableList  
mutableMapOf LinkedHashMap fun <K, V> mutableMapOf(vararg pairs: Pair<K, V> ): MutableMap<K, V> 順序が維持される
mutableSetOf LinkedHashSet fun mutableSetOf(vararg elements: T): MutableSet 順序が維持される
setOf LinkedHashSet fun setOf(vararg elements: T): Set, fun setOf(): Set, fun setOf(element: T): Set immutable 順序が維持される
sortedMapOf TreeMap fun <K : Comparable, V> sortedMapOf(vararg pairs: Pair<K, V> ): SortedMap<K, V> 初期化値がソートして格納される
sortedSetOf TreeSet fun sortedSetOf(vararg elements: T): TreeSet, fun sortedSetOf(comparator: Comparator, vararg elements: T ): TreeSet 初期化値がソートして格納される

配列

ByteArray, ShortArray, IntArray, LongArray, FloatArray, DoubleArray, BooleanArary, CharArray Javaで配列を引数とするメソッドを呼び出す場合、Kotlin側で配列を作成する必要がある
(例) Java の場合

char[] buf = new char[64];
int len;
while(( len = reader.read( buf, 0, buf.length )) >= 0 ) {
    // 処理
}

Kotlin の場合

val buf = CharArray( 64 )
var len = reader.read( buf, 0, buf.size )
while( len >= 0 ) {
    // 処理
    len = reader.read( buf, 0, buf.size )
}

int配列

3通りの方法で int 配列を作成し、jad でどのような Javaソースが生成されているかを確認

Array

(kotlin)
val intArray = Array<Int>( 3, { idx -> idx + 1 } )
(java)
Integer intArray[] = new Integer[3];
// 以下代入式

IntArray

(kotlin)
val intArray = IntArray( 3, { idx -> idx + 1 } )
(java)
int intArray[] = new int[3];
// 以下代入式

arrayOf

(kotlin)
val intArray = arrayOf( 1, 2, 3 )
(java)
Integer intArray[] { Integer.valueOf(1), Integer.valueOf(2), Integer.valueOf(3) };

intArrayOf

(kotlin)
val intArray = intArrayOf( 1, 2, 3 )
(java)
int intArray[] { 1, 2, 3 };

IntArray と intArrayOf は int配列(プリミティブ)となり、以外は Integer配列(オブジェクト)となった。

リスト

reduce, fold を使ってたたみこむ(数値なら合計する)

map

Sequence

Sequence に続くコレクション関数によっては 1件ずつ処理させる

(サンプル)

listOf( 1,2,3 ).filter {
    println( "filter: ${it}" )
    it % 2 == 0
}.forEach {
    println( "forEach: ${it}" )
}

これをコンパイルして実行すると、次のように filter 処理が終わってから forEach が実行される

filter: 1
filter: 2
filter: 3
forEach: 2

これを次のように asSequence を追加すると

listOf( 1,2,3 ).asSequence().filter {
    println( "filter: ${it}" )
    it % 2 == 0
}.forEach {
    println( "forEach: ${it}" )
}

filter 処理と連動して forEach が実行される

filter: 1
filter: 2
forEach: 2
filter: 3
※asSequence() の後続のコレクション関数が sortedBy のように逐次処理できない場合は、sortedBy の処理が終わってから次の関数が実行される

その他