filterIndexedでインデックスを使った柔軟なフィルタリングを実現する方法

Kotlin
記事内に広告が含まれる場合があります

Kotlinでリストの要素をフィルタリングする際、通常のfilter関数では値しか参照できません。しかし、インデックス番号も含めて条件を指定したい場合には、filterIndexedが非常に便利です。


基本的な使い方

Kotlin
val list = listOf("a", "b", "c", "d", "e")

val evenIndexItems = list.filterIndexed { index, _ -> index % 2 == 0 }

println(evenIndexItems)
// 出力: [a, c, e]
  • filterIndexedは各要素に対してインデックスと値の両方を使った判定が可能です。
  • 上記例では、偶数番目の要素だけを抽出しています。

値とインデックスの両方に条件をかける例

Kotlin
val result = listOf("apple", "banana", "cherry", "date", "fig")
    .filterIndexed { index, value -> index % 2 == 1 && value.length >= 6 }

println(result)
// 出力: [banana]
  • インデックスが奇数かつ文字列の長さが6以上の要素を抽出。

応用例:特定位置の要素だけを残す

Kotlin
val result = listOf(10, 20, 30, 40, 50)
    .filterIndexed { index, _ -> index in 1..3 }

println(result)
// 出力: [20, 30, 40]
  • スライス的に使いたい場面にも有効です。

まとめ

関数用途
filter値のみを使って条件を指定する場合
filterIndexedインデックスと値の両方を使って条件を指定する場合

filterIndexedを使うことで、単純な条件だけでなく、位置に応じたロジックを含めたフィルタリングが可能になります。処理の意図がより明確になり、コードもスッキリ書けるため、知っておくと非常に便利な関数です。日常的なデータ処理の中でも活用してみてください。

タイトルとURLをコピーしました