我有一個案例類,它是餐館串列:
case class RestaurantSearchResponse(
restaurant: Restaurant,
city: CityDetail
)
case class Restaurant(
id: Long,
name: String,
rating: BigDecimal
)
RestaurantSearchResponse是我們目前從 API 回傳的內容。現在我有另一個案例類,其中sales_count包含以下餐廳串列:
case class HighSellerSort(
id: Long = 0L,
restaurantId: Long,
orders_count: Int
)
所以現在在 API 方面,我有一系列餐廳和一系列HighSellerSort. 它們可以根據restaurantId兩個案例類中存在的內容進行合并。如何合并它們,然后基于orders_count.
注意: HighSellerSort 中可能沒有特定餐廳的記錄。
uj5u.com熱心網友回復:
重要的第一步是將您的銷售序列轉換為 a Map,這樣您的邏輯就不會變成二次方,就像在接受的答案中那樣。
val lookup = sales
.map { s => s.restaurant_id -> s.orders_count }
.toMap
.withDefault(_ => 0)
現在,如果您只需要排序:
restaurants.sortBy { r => lookup(r.id) }
或者,如果您想用計數標記每家餐廳:
restaurants.map { r => r -> r.lookup(r.id) }
或者如果你想要兩者
restaurants.map { r => r -> r.lookup(r.id) }.sortBy(_._2)
uj5u.com熱心網友回復:
基本上,您需要遍歷您的餐廳,并尋找HighSellerSort與餐廳相對應的餐廳。因此,根據我對您的問題的假設,這可以是以下方法:
def merge(
restaurants: Seq[Restaurant],
sorts: Seq[HighSellerSort]
): Seq[(Restaurant, Option[HighSellerSort])] = {
restaurants.map { restaurant =>
restaurant -> sorts.collectFirst {
case sort if sort.restaurantId == restaurant.id => sort
}
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/489618.html
上一篇:JAVA_HOME的路徑不正確
