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

时间:2018-11-06 15:19:09

标签: 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>,
   ...)

我想找到所有不在家庭中的宠物。它必须作为集合返回 因为我已经获得了这个签名,可以与

一起玩
fun Locality.findFeralPets(): Set<Pet> =

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

allPets.filter { pet -> pet.name != "Bob" }

2 个答案:

答案 0 :(得分:5)

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

allPets.filterTo(HashSet()) { pet -> pet.name != "Bob" }

答案 1 :(得分:1)

filter返回一个Iterable,它上面有一个扩展方法,称为toSet,它返回一个Set。例如

allPets.filter { pet -> pet.name != "Bob" }.toSet()