KotlinコレクションAPIの概要

1概要

このクイックチュートリアルでは、KotlinのコレクションAPIを紹介し、Kotlinのさまざまなコレクションの種類と、コレクションに対する一般的な操作について説明します。

2コレクション対ミュータブルコレクション

まず、Kotlinのさまざまな種類のコレクションを見てみましょう。基本的な種類のコレクションを初期化する方法がわかります。

Collection インターフェースは読み取り専用メソッドをサポートし、 MutableCollection は読み取り/書き込みメソッドをサポートします。

2.1. リスト

メソッド listOf() を使用して単純な読み取り専用 List を作成し、 mutableListOf() を使用して MutableList を読み書きできます。

val theList = listOf("one", "two", "three")

val theMutableList = mutableListOf("one", "two", "three")

2.2. セット

同様に、メソッド setOf() を使用して読み取り専用 Set を作成し、 mutableSetOf() を使用して MutableSet を読み書きできます。

val theSet = setOf("one", "two", "three")

val theMutableSet = mutableSetOf("one", "two", "three")

2.3. 地図

メソッド mapOf() を使って読み取り専用 Map を作成し、 mutableMapOf() を使って読み書き MutableMap を作ることもできます。

val theMap = mapOf(1 to "one", 2 to "two", 3 to "three")

val theMutableMap = mutableMapOf(1 to "one", 2 to "two", 3 to "three")

3便利なオペレータ

KotlinのCollections APIは、Javaで見つけることができるものよりもはるかに豊富です。

3.1. “ in” 演算子

collection.contains(x) に変換できる式“ x in collection ”を使用できます。

@Test
fun whenSearchForExistingItem__thenFound () {
    val theList = listOf("one", "two", "three")

    assertTrue("two" in theList)
}

3.2. オペレーター

""演算子を使用して、要素またはコレクション全体を別の要素にコレクションできます。

@Test
fun whenJoinTwoCollections__thenSuccess () {
    val firstList = listOf("one", "two", "three")
    val secondList = listOf("four", "five", "six")
    val resultList = firstList + secondList

    assertEquals(6, resultList.size)
    assertTrue(resultList.contains("two"))
    assertTrue(resultList.contains("five"))
}

3.3. オペレーター

同様に、「 - 」演算子を使用して、1つの要素または複数の要素を削除できます。

@Test
fun whenExcludeItems__thenRemoved () {
    val firstList = listOf("one", "two", "three")
    val secondList = listOf("one", "three")
    val resultList = firstList - secondList

    assertEquals(1, resultList.size)
    assertTrue(resultList.contains("two"))
}

4その他の方法

最後に、いくつかの一般的な収集方法を探ります。 Javaでは、高度なメソッドを利用したい場合は、 Stream APIを使用する必要があります。

Kotlinでは、Collections APIで同様のメソッドを利用できます。

  • 与えられた Listからサブリストを得ることができます: **

@Test
fun whenSliceCollection__thenSuccess () {
    val theList = listOf("one", "two", "three")
    val resultList = theList.slice(1..2)

    assertEquals(2, resultList.size)
    assertTrue(resultList.contains("two"))
}
  • __Listからすべてのnullを簡単に削除できます。

@Test
fun whenFilterNullValues__thenSuccess () {
    val theList = listOf("one", null, "two", null, "three")
    val resultList = theList.filterNotNull()

    assertEquals(3, resultList.size)
}
  • Javaの Stream APIの filter()メソッドと同様に機能するfilter ()、 __を使用して、コレクション項目を簡単にフィルタリングできます。

@Test
fun whenFilterNonPositiveValues__thenSuccess () {
    val theList = listOf(1, 2, -3, -4, 5, -6)
    val resultList = theList.filter{ it > 0}

    assertEquals(3, resultList.size)
    assertTrue(resultList.contains(1))
    assertFalse(resultList.contains(-4))
}
  • 最初のN個のアイテムを落とすことができます。**

@Test
fun whenDropFirstItems__thenRemoved () {
    val theList = listOf("one", "two", "three", "four")
    val resultList = theList.drop(2)

    assertEquals(2, resultList.size)
    assertFalse(resultList.contains("one"))
    assertFalse(resultList.contains("two"))
}
  • 与えられた条件を満たす場合、最初のいくつかのアイテムをドロップできます。

@Test
fun whenDropFirstItemsBasedOnCondition__thenRemoved () {
    val theList = listOf("one", "two", "three", "four")
    val resultList = theList.dropWhile{ it.length < 4 }

    assertEquals(2, resultList.size)
    assertFalse(resultList.contains("one"))
    assertFalse(resultList.contains("two"))
}
  • 要素をグループ化することができます。**

@Test
fun whenGroupItems__thenSuccess () {
    val theList = listOf(1, 2, 3, 4, 5, 6)
    val resultMap = theList.groupBy{ it % 3}

    assertEquals(3, resultMap.size)

    assertTrue(resultMap[1]!!.contains(1))
    assertTrue(resultMap[2]!!.contains(5))
}
  • 提供されている関数を使ってすべての要素をマッピングすることができます。

@Test
fun whenApplyFunctionToAllItems__thenSuccess () {
    val theList = listOf(1, 2, 3, 4, 5, 6)
    val resultList = theList.map{ it **  it }

    assertEquals(4, resultList[1])
    assertEquals(9, resultList[2])
}
  • ネストされたコレクションを平坦化するために flatmap() を使うことができます。ここでは、 Strings をL __ist <String> に変換し、 List <List <String>> __で終わることを避けています:**

@Test
fun whenApplyMultiOutputFunctionToAllItems__thenSuccess () {
    val theList = listOf("John", "Tom")
    val resultList = theList.flatMap{ it.toLowerCase().toList() }

    assertEquals(7, resultList.size)
}
  • 折りたたむ/減らす演算を実行できます

@Test
fun whenApplyFunctionToAllItemsWithStartingValue__thenSuccess () {
    val theList = listOf(1, 2, 3, 4, 5, 6)
    val finalResult = theList.fold(0, {acc, i -> acc + (i **  i)})

    assertEquals(91, finalResult)
}

5結論

KotlinのCollections APIといくつかの最も興味深いメソッドを調べました。

そして、いつものように、完全なソースコードが見つかります。 over on GitHub。