[英]How to filter a list if a specific value isn't on another list of different type
假設我們有兩個對象和每個對象的列表。
class Brand(val id: Int, val name: String)
class Car(val id: Int, val name: String, val brandID: Int)
val cars: List<Car> = listOf(Car(1, 11), Car(2, 13))
val brands: List<Brand> = listOf(Brand(11, "BMW"), Brand(12, "Ford"), Brand(13, "Tesla"))
我想要實現的是過濾品牌列表以僅顯示與汽車列表關聯的品牌,並且通過上述示例,應從列表中刪除品牌“福特”。
這是我所做的兩個解決方案,但都沒有解決。
val filterdBrandsA = brands.filter { b -> cars.any { it.brandID == b.id } }
// filterdBrandsA size always = 0 ??
val filterdBrandsB = brands.filter { b -> cars.map { it.brandID }.contains(b.id) }
// filterdBrandsB size always = 0 ??
那我做錯了什么?
我將您的代碼復制到臨時文件中,解決方案是使用“flatMap”:
class Brand(val id: Int, val name: String)
class Car(val id: Int, val name: String, val brandID: Int)
val cars: List<Car> = listOf(
Car(id = 1, name = "", brandID = 11),
Car(id = 2, name = "", brandID = 13)
)
val brands: List<Brand> = listOf(
Brand(id = 11, name = "BMW"),
Brand(id = 12, name = "Ford"),
Brand(id = 13, name = "Tesla")
)
val result = cars.flatMap {
brands.filter { brand -> brand.id == it.brandID }
}
result.forEach {
println(it.name) // result: BMW and Tesla
}
這看起來很好很簡單:
val filterdBrandsA = brands.filter{ b -> b.id in cars.map{it.brandID}}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.