簡體   English   中英

如果特定值不在另一個不同類型的列表中,如何過濾列表

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM