+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 پاسخ 261 بازدید
0 امتیاز
1 پاسخ 430 بازدید
0 امتیاز
1 پاسخ 3.6هزار بازدید
0 امتیاز
1 پاسخ 556 بازدید
+1 امتیاز
1 پاسخ 329 بازدید
سوال شده 9 سال قبل در برنامه نویسی توسط asg.mojtaba (1.2هزار امتیاز)
0 امتیاز
1 پاسخ 192 بازدید
سوال شده 8 سال قبل در برنامه نویسی توسط Saeed Zarinfam (1.1هزار امتیاز)
0 امتیاز
1 پاسخ 445 بازدید
+1 امتیاز
1 پاسخ 651 بازدید
0 امتیاز
0 پاسخ 335 بازدید
...