2017-10-04 22 views
1

我有一個對象列表[T],每個對象都有另一個對象列表[M]。我想過濾出內部列表M給出的值作爲比較。如何從scala中的對象的子列表中篩選元素?

這是該名單的一個例子:

case class People(val name: String, val pets: List[Pet]) 

case class Pet(val name: String, val `type`: String) 

val noisyNeighbors = List(
    People(
    "Obelix", 
    List(
     Pet("koko", "cat"), 
     Pet("kiki", "dog") 
    ) 
), 
    People(
    "Asterix", 
    List(
     Pet("piki", "lizard"), 
     Pet("poko", "dog") 
    ) 
) 
) 

給定一個val petTypeToRemove = "dog",我想有一個結果列表:

val lessNoisyNeighbors = List(
    People(
    "Obelix", 
    List(
     Pet("koko", "cat") 
    ) 
), 
    People(
    "Asterix", 
    List(
     Pet("piki", "lizard") 
    ) 
) 
) 

我已經嘗試了一些東西,但我不真的不知道從哪裏開始:

val lessNoisyNeighbors = noisyNeighbors.filter { 
    ??? 
} 

回答

0

撥打map關於List的鄰居,併爲每個鄰居,將其替換爲具有指定類型的寵物過濾出來的副本。請注意,這裏沒有任何變化。

val petTypeToRemove = "dog" 

val lessNoisyNeighbors = 
    noisyNeighbors.map(n => n.copy(pets = n.pets.filterNot(_.`type` == petTypeToRemove))) 
0

你不想過濾鄰居(從你想如何處理Asterix)。

val lessNoisyNeighbors = noisyNeighbors.map { neighbor => 
    neighbor.copy(pets = neighbor.pets.filter(_ != petTypeToRemove)) 
} 

點綴一些從那裏可能需要(例如保存引用相等如果可能,或刪除其人只寵物是寵物去除),但是這是基本骨架。

相關問題