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