الدالة flatMap()‎ في Kotlin

من موسوعة حسوب
< Kotlin‏ | collections
مراجعة 11:36، 30 أغسطس 2018 بواسطة عبد اللطيف ايمش (نقاش | مساهمات) (استبدال النص - 'Kotlin Functions' ب'Kotlin Function')
اذهب إلى التنقل اذهب إلى البحث

تعيد الدالة flatMap()‎ قائمةً تضم ناتج تطبيق الدالة transform()‎ المُمرّرة إليها على عناصر المصفوفة، أو المجموعة، أو الخريطة التي استُدعيت معها.

البنية العامة

يمكن استدعاء الدالة flatMap()‎ مع المصفوفات:

inline fun <T, R> Array<out T>.flatMap(
    transform: (T) -> Iterable<R>
): List<R> 
inline fun <R> ByteArray.flatMap(
    transform: (Byte) -> Iterable<R>
): List<R> 
inline fun <R> ShortArray.flatMap(
    transform: (Short) -> Iterable<R>
): List<R> 
inline fun <R> IntArray.flatMap(
    transform: (Int) -> Iterable<R>
): List<R> 
inline fun <R> LongArray.flatMap(
    transform: (Long) -> Iterable<R>
): List<R> 
inline fun <R> FloatArray.flatMap(
    transform: (Float) -> Iterable<R>
): List<R> 
inline fun <R> DoubleArray.flatMap(
    transform: (Double) -> Iterable<R>
): List<R> 
inline fun <R> BooleanArray.flatMap(
    transform: (Boolean) -> Iterable<R>
): List<R> 
inline fun <R> CharArray.flatMap(
    transform: (Char) -> Iterable<R>
): List<R>

ويمكن استدعاؤها مع المجموعات:

inline fun <T, R> Iterable<T>.flatMap(
    transform: (T) -> Iterable<R>
): List<R>

ويمكن استدعاؤها أيضًا مع الخرائط:

inline fun <K, V, R> Map<out K, V>.flatMap(
    transform: (Entry<K, V>) -> Iterable<R>
): List<R>

وجود الكلمة المفتاحية inline يدل على أنَّ هذه الدالة مباشرة (للمزيد من التفاصيل، راجع صفحة الدوال المباشرة (inline functions)).

القيم المعادة

تُعاد قائمةٌ تضم ناتج تطبيق الدالة transform()‎ المعطاة على كل عنصر من عناصر المصفوفة أو المجموعة أو الخريطة المعطاة أيضًا.

أمثلة

استخدام الدالة ()flatMap مع الخرائط

تعرِّف الشيفرة الآتية خريطةً باسم map باستخدام الدالة ()mapOf، ثمَّ تستخدم الدالة ()flatMap لإنشاء قائمة تحوي ناتج تطبيق الدالة ()func المعرَّفة مسبقًا على أزواج تلك الخريطة:

fun main(args: Array<String>) {
    val map = mapOf("x" to 2, "y" to 6, "z" to 5)
    val func: (Int) -> Array<Int> = { arrayOf(it)}

    println(map.flatMap { (a, b) -> listOf(a) }) // [x, y, z]
}

انظر أيضًا

مصادر