Permalink
Switch branches/tags
Nothing to show
Find file Copy path
Fetching contributors…
Cannot retrieve contributors at this time
34 lines (25 sloc) 1.11 KB
layout title date comments categories
post
リストの中から、条件にマッチした最初のアイテムが何番目かを返すやつ
2017/12/06 23:59:00 +0900
true
C#
Kotlin

Kotlin で、「リストの中から、条件にマッチした最初のアイテムが何番目かを知りたい」のだけど、既定のコレクションクラスにはそんな機能はないみたいだったので、作ってみた。

拡張メソッド

inline fun <T> Iterable<T>.firstIndexOrNull(predicate: (T) -> Boolean): Int? {
    return this.mapIndexed { index, item -> Pair(index, item) }
            .firstOrNull() { predicate(it.second) }
            ?.first
}

.mapIndexed でインデックス付きの要素に変換して、ヒットしたらそのインデックスを返してるだけですね。

使い方

val arr = arrayListOf("a", "b", "c")

arr.firstIndexOrNull { it == "b"} // -> 1
arr.firstIndexOrNull { it == "z"} // -> null

ヒットしなかったら -1 というのは悪手だと思う。 nullable があるのだから使おう。