+2 امتیاز
قبل در برنامه نویسی توسط (1.1هزار امتیاز)

تفاوت متد های map و flatMap کلاس Future در Scala چیست؟

1 پاسخ

+1 امتیاز
قبل توسط (1.2هزار امتیاز)
انتخاب شده قبل توسط
 
بهترین پاسخ

هر وقت یک زنجیره از Future ها داشته باشیم در صورت که از تابع map برای فراخوانی زنجیره ای این Future ها استفاده کنیم نتیجه از نوع Future ها تو در تو خواهد بود اما اگر از flatMap استفاده کنیم همه Future های تو در تو در قالب یک Future تبدیل خواهد شد.
از لحاظ مفهومی Future نیز مانند List ها یک Container محسوب می شود و مفهوم map و flatMap برای تمامی Container ها به همین مفهوم (یعنی یکی کردن Container در حالت flatMap) موجود است.
مثال زیر نوع خروجی هر کدام از دو تابع را نشان می دهد:

import scala.concurrent._
import scala.concurrent.ExecutionContext.Implicits.global

def calculateA = Future {
  Thread.sleep(2000L)
  "A Calculated 78.1"
}

def calculateB(aResult : String ) = Future {
  Thread.sleep(2000L)
  aResult + " + B Result Is 12"
}

calculateA.map(x => calculateB(x)) // return type is Future[Future[String]

calculateA.flatMap(x => calculateB(x)) //return type is Future[String]

 

سوالات مشابه

+1 امتیاز
0 پاسخ 263 بازدید
0 امتیاز
1 پاسخ 435 بازدید
0 امتیاز
1 پاسخ 3.6هزار بازدید
0 امتیاز
1 پاسخ 560 بازدید
+1 امتیاز
1 پاسخ 330 بازدید
سوال شده 10 سال قبل در برنامه نویسی توسط phonix4466 (1.2هزار امتیاز)
0 امتیاز
1 پاسخ 198 بازدید
سوال شده 8 سال قبل در برنامه نویسی توسط Saeed Zarinfam (1.1هزار امتیاز)
0 امتیاز
1 پاسخ 447 بازدید
+1 امتیاز
1 پاسخ 661 بازدید
0 امتیاز
0 پاسخ 337 بازدید
...