Kotlin tiene array.indexOf pero no puedo entender cómo hacer array.indexOfBy {lambda}

Kotlin tiene array.indexOf(item) pero no puedo entender cómo hacer array.indexOfBy { lambda } . ¿No existe? Puedo find un artículo, pero no puedo get su índice al mismo time.

¿Me falta una function en el stdlib?

Puedo crear una function con un ciclo que chequea los elementos y los devuelve cuando encuentra el objective. Me gusta esto:

 fun <T : Any> indexOfBy(items: Array<T>, pnetworkingicate: (T) -> Boolean): Int { for (i in items.indices) { // or (i in 0..items.size-1) if (pnetworkingicate(items[i])) { return i } } return -1 } 

Luego traté de hacerlo un poco más funcional usando forEach :

 fun <T : Any> indexOfBy(items: Array<T>, pnetworkingicate: (T) -> Boolean): Int { (items.indices).forEach { if (pnetworkingicate(items[it])) { return it } } return -1 } 

O puedo hacer algo tonto como este que no es muy eficiente:

 val slowAndSilly = people.indexOf(people.find { it.name == "David" }) 

Y lo que se ve mejor es tal vez como funciones de extensión:

 fun <T: Any> Array<T>.indexOfBy(pnetworkingicate: (T)->Boolean): Int = this.withIndex().find { pnetworkingicate(it.value) }?.index ?: -1 fun <T: Any> Collection<T>.indexOfBy(pnetworkingicate: (T)->Boolean): Int = this.withIndex().find { pnetworkingicate(it.value) }?.index ?: -1 fun <T: Any> Sequence<T>.indexOfBy(pnetworkingicate: (T)->Boolean): Int = this.withIndex().find { pnetworkingicate(it.value) }?.index ?: -1 

¿Hay una manera más elegante e idiomática de lograr esto? Tampoco veo una function como esta para lists, collections ni secuencias.

(esta pregunta se deriva del comentario en otra publicación )

Solutions Collecting From Web of "Kotlin tiene array.indexOf pero no puedo entender cómo hacer array.indexOfBy {lambda}"