如何使用 Option 或 PartialFunction 简化方法
How to simplify method using Option or PartialFunction
我需要一些帮助来修改(简化)我的代码。
这里有一个例子:
def getBids(rawBids: RDD[List[String]], exchangeRates: Map[String, Double]): RDD[BidItem] = {
rawBids.filter(bidList => !bidList(2).matches(ERROR_REGEXP))
.flatMap(bidList => {
Constants.TARGET_LOSAS.map { losa =>
val indexOfLosa = Constants.BIDS_HEADER.indexOf(losa)
if (bidList(indexOfLosa) != null && !bidList(indexOfLosa).equals("") && isDoubleNumber(bidList(indexOfLosa))) {
BidItem(bidList.head, bidList(1), losa, bidList(indexOfLosa).toDouble)
} else {
BidItem(bidList.head, bidList(1), losa, 0)
}
}
})
.filter(unit => unit.price != 0)
.map(unit => {
val convertedPrice = usdToEur(unit.price, unit.bidDate, exchangeRates)
val convertedDate = changeDateFormat(unit.bidDate)
BidItem(unit.motelId, convertedDate, unit.loSa, convertedPrice)
})
}
我需要更改 flatMap 方法并避免 "ELSE" 部分代码的情况
据我所知,我们可以使用部分函数或 [Option]。它可以帮助我们避免 "if" 语句为 FALSE 的情况。如果我从代码中删除 ELSE 部分,scala 不会给我编译代码的机会。谢谢!
val doubleValue = Option(bidList(indexOfLosa))
.filterNot(_.equals(""))
.filter(isDoubleNumber)
.map(_.toDouble)
.getOrElse(0)
BidItem(bidList.head, bidList(1), losa, doubleValue)
我需要一些帮助来修改(简化)我的代码。
这里有一个例子:
def getBids(rawBids: RDD[List[String]], exchangeRates: Map[String, Double]): RDD[BidItem] = {
rawBids.filter(bidList => !bidList(2).matches(ERROR_REGEXP))
.flatMap(bidList => {
Constants.TARGET_LOSAS.map { losa =>
val indexOfLosa = Constants.BIDS_HEADER.indexOf(losa)
if (bidList(indexOfLosa) != null && !bidList(indexOfLosa).equals("") && isDoubleNumber(bidList(indexOfLosa))) {
BidItem(bidList.head, bidList(1), losa, bidList(indexOfLosa).toDouble)
} else {
BidItem(bidList.head, bidList(1), losa, 0)
}
}
})
.filter(unit => unit.price != 0)
.map(unit => {
val convertedPrice = usdToEur(unit.price, unit.bidDate, exchangeRates)
val convertedDate = changeDateFormat(unit.bidDate)
BidItem(unit.motelId, convertedDate, unit.loSa, convertedPrice)
})
}
我需要更改 flatMap 方法并避免 "ELSE" 部分代码的情况
据我所知,我们可以使用部分函数或 [Option]。它可以帮助我们避免 "if" 语句为 FALSE 的情况。如果我从代码中删除 ELSE 部分,scala 不会给我编译代码的机会。谢谢!
val doubleValue = Option(bidList(indexOfLosa))
.filterNot(_.equals(""))
.filter(isDoubleNumber)
.map(_.toDouble)
.getOrElse(0)
BidItem(bidList.head, bidList(1), losa, doubleValue)