我试图掌握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>,
...)
我想找到所有不在家庭中的宠物。它必须作为集合返回 因为我已经获得了这个签名,可以与
一起玩fun Locality.findFeralPets(): Set<Pet> =
我本来要进行过滤操作,但这会返回一个列表,我看不到如何将其转换为集合。谁能指出我正确的方向?过滤器很可能是完全错误的方法!
allPets.filter { pet -> pet.name != "Bob" }
答案 0 :(得分:5)
以不同的方式执行此操作更有效,避免了单独的转换:
allPets.filterTo(HashSet()) { pet -> pet.name != "Bob" }
答案 1 :(得分:1)
filter
返回一个Iterable
,它上面有一个扩展方法,称为toSet
,它返回一个Set
。例如
allPets.filter { pet -> pet.name != "Bob" }.toSet()