Kotlinでは、リスト内の特定の型の要素のみを取得したい場合に filterIsInstance
を使うと、型チェックを簡潔に行いながらフィルタリングができます。
filterIsInstanceの基本的な使い方
Kotlin
val mixedList: List<Any> = listOf(1, "Kotlin", 2.5, "Java", 3)
val strings = mixedList.filterIsInstance<String>()
println(strings) // 出力: [Kotlin, Java]
ポイント:
filterIsInstance<T>()
を使うと、リストから T 型の要素のみを抽出 できるAny
型のリストから 安全に特定の型を取り出せる
filterIsInstanceの活用例
1. 異なるデータ型を含むリストから特定の型を抽出
Kotlin
val dataList: List<Any> = listOf(100, "Kotlin", 42.0, "Java", 200)
val numbers = dataList.filterIsInstance<Int>()
println(numbers) // 出力: [100, 200]
リスト内の Int
型の要素のみを取得できます。
2. クラスの型でフィルタリング
Kotlin
open class Animal
class Dog : Animal()
class Cat : Animal()
val animals: List<Animal> = listOf(Dog(), Cat(), Dog())
val dogs = animals.filterIsInstance<Dog>()
println(dogs) // 出力: [Dog@xxxxxx, Dog@yyyyyy]
filterIsInstance
を使うと、特定のサブクラスのみを抽出 することも可能です。
3. マップの値から特定の型を取得
Kotlin
val mixedMap: Map<String, Any> = mapOf("name" to "Kotlin", "version" to 1.8, "active" to true)
val numbers = mixedMap.values.filterIsInstance<Double>()
println(numbers) // 出力: [1.8]
Map
の values
を対象に filterIsInstance
を適用することで、特定の型の値のみを取得できます。
filterIsInstanceを活用するメリット
- リスト内の特定の型の要素を安全に抽出できる
- スマートキャストを使わずに型チェックが可能
- ジェネリクスやクラス型のフィルタリングが簡単にできる
リストやマップの要素から 特定の型のデータのみを扱いたい 場面では、ぜひ filterIsInstance
を活用してみてください!