+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 پاسخ 164 بازدید
0 امتیاز
1 پاسخ 290 بازدید
0 امتیاز
1 پاسخ 535 بازدید
0 امتیاز
1 پاسخ 438 بازدید
+1 امتیاز
1 پاسخ 237 بازدید
سوال شده 9 سال قبل در برنامه نویسی توسط asg.mojtaba (1.2هزار امتیاز)
0 امتیاز
1 پاسخ 164 بازدید
سوال شده 7 سال قبل در برنامه نویسی توسط Saeed Zarinfam (1.1هزار امتیاز)
0 امتیاز
1 پاسخ 363 بازدید
+1 امتیاز
1 پاسخ 535 بازدید
0 امتیاز
0 پاسخ 250 بازدید
...