+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 پاسخ 267 بازدید
0 امتیاز
1 پاسخ 442 بازدید
0 امتیاز
1 پاسخ 3.7هزار بازدید
0 امتیاز
1 پاسخ 566 بازدید
+1 امتیاز
1 پاسخ 336 بازدید
سوال شده 10 سال قبل در برنامه نویسی توسط phonix4466 (1.2هزار امتیاز)
0 امتیاز
1 پاسخ 203 بازدید
سوال شده 8 سال قبل در برنامه نویسی توسط Saeed Zarinfam (1.1هزار امتیاز)
0 امتیاز
1 پاسخ 452 بازدید
+1 امتیاز
1 پاسخ 672 بازدید
0 امتیاز
0 پاسخ 342 بازدید
...