如何在Kotlin中将一个集过滤到另一个集

gri*_*rdo 3 kotlin

我试图掌握Kotlin和函数式编程,但没有通过一个非常简单的练习就失败了。

我将对此进行一些修改,以使其不太明显是来自特定的在线课程,但我只是想真正地开始,而不是在愚弄任何人...

我正在处理2个收藏集

data class Pet(val name: String)

data class Household (
   val pet: Pet,
   ... 
)

data class District(
   val allPets: Set<Pet>,
   val allHouseholds: List<Household>,
   ...)
Run Code Online (Sandbox Code Playgroud)

我想找到所有不在家庭中的宠物。它必须作为Set返回,因为我已经获得此签名才能使用

fun Locality.findFeralPets(): Set<Pet> =
Run Code Online (Sandbox Code Playgroud)

我本来要执行过滤操作,但这会返回一个列表,但看不到如何将其转换为集合。谁能指出我正确的方向?过滤器很可能是完全错误的方法!

allPets.filter { pet -> pet.name != "Bob" }
Run Code Online (Sandbox Code Playgroud)

yol*_*ole 8

以不同的方式执行此操作效率更高,避免了单独的转换:

allPets.filterTo(HashSet()) { pet -> pet.name != "Bob" }
Run Code Online (Sandbox Code Playgroud)