Kotlin如何从嵌套集合中提取Person类name属性的去重值
Kotlin嵌套集合提取唯一属性解决方案
你可以通过「打平嵌套集合→过滤目标类型→按字段去重→提取属性」的链路实现需求,有两种常用实现方式:
方案1:分步处理(可读性更强)
val uniquePersonNames = arr.flatten() // 过滤出所有Person类型元素,自动完成类型转型 .filterIsInstance<Person>() // 按name字段去重 .distinctBy { it.name } // 提取name属性得到最终结果 .map { it.name } // 输出验证 uniquePersonNames.forEach { println(it) }
方案2:flatMap一体化处理(写法更简洁)
val uniquePersonNames = arr.flatMap { subList -> // 直接从子列表中提取Person的name字段 subList.filterIsInstance<Person>().map { it.name } }.distinct() // 直接对字符串列表去重
说明
flatten()专门用于把嵌套集合展开为单层集合,是Kotlin集合操作的标准APIfilterIsInstance<T>()是类型安全的过滤方法,会自动抛弃非目标类型的元素,同时完成类型转型,不需要手动做is判断和强转- 如果你的子列表中Person的位置是固定的(比如前两位一定是Person),也可以通过下标取元素省略类型判断,但上面的写法兼容性更高,不受元素位置影响
内容的提问来源于stack exchange,提问作者micdev
相关产品推荐
相关产品推荐

