Scala - conversion from for-comprehension to map, flatMap

less than 1 minute read

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
def getProduct(id: String): Try[Product]
def getPrice(product: Product): Try[Price]
def calculateProductPrice(product: Product, price: Price): Try[Price]
for {
  product <- getProduct("1234")
  price <- getPrice(product)
  calculatedPrice <- calculateProductPrice(product, price)
  if (calculatedPrice > 1000)
} yield (product, calculatedPrice)
getProduct("1234").flatMap{ product =>
  getPrice(product).flatMap{ price =>
    calculateProductPrice(product, price).filter { p => p > 1000 }
      .map{ p => (product, p) }
  }
}