Mic*_*ael 5 monads functional-programming scala
假设我有一个函数getCustomers和getOrdersByCustomer。
def getCustomer():List [Customer] = ... def getOrdersByCustomer(cust:Customer):List [Order] = ...
现在我可以轻松定义一个函数 getOrdersOfAllCustomers
def getOrdersOfAllCustomers():List [Order] = for(cust <-getCustomer(); order <-getOrderByCustomer(cust))收益单
到目前为止,还算不错,但是如果getCustomer和getOrdersByCustomer返回列表的选项呢?
def getCustomer():Option [List [Customer]] = ... def getOrdersByCustomer(cust:Customer):Option [List [Order]] = ...
现在,我想实现两种不同的风格getOrdersOfAllCustomers():
getCustomer返回None,则返回None,并且不关心是否getOrdersByCustomer返回None。您如何建议实施?
尝试这个,
def getOrdersOfAllCustomers(): Option[List[Order]] =
for{
cust <- getCustomer().toList.flatten;
order <- getOrderByCustomer(cust).toList.flatten
} yield order
Run Code Online (Sandbox Code Playgroud)